LeedCode OJ --- Binary Tree Inorder Traversal
今天只是写了递归的版本,因为还没想好怎么用迭代来实现,可以写的过程中,有一点是有疑问的,虽然我的代码可以AC。
问题是:主调函数是可以使用子函数中返回的在子函数中定义的vector. 我认为在被调函数执行结束之后,其分配的空间是应该被释放的,所以在被调函数中定义的变量也是不可以被主调函数中使用的...可能是C++的基础知识又给忘了,有空要拾起来了。
附上代码(递归版):
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> inorderTraversal(TreeNode *root) {
vector<int> ans;
if (root == NULL) return ans;
if (root->left == NULL && root->right == NULL) {
ans.push_back(root->val);
return ans;
}
if (root->left != NULL) {
ans = inorderTraversal(root->left);
}
ans.push_back(root->val);
if (root->right != NULL) {
vector<int> tmp = inorderTraversal(root->right);
for (unsigned int i = ; i < tmp.size(); i++)
ans.push_back(tmp[i]);
} return ans;
}
};
今天补上用迭代的方法实现了二叉树的中序遍历, 思路就是首先迭代到左子树最底层的节点(二叉树最左边的节点), 并将路径上的节点压入栈中, 然后依次从栈中弹出元素并加入到结果(ans)中, 然后遍历它的右子树。
附上代码(非递归版):
class Solution {
public:
vector<int> inorderTraversal(TreeNode *root) {
int tail = ;
vector<TreeNode*> Stack;
vector<int> ans;
TreeNode *T = root;
while (T != NULL || tail) {
while (T != NULL) {
tail++;
Stack.push_back(T);
T = T->left;
}
T = Stack[--tail];
Stack.pop_back();
ans.push_back(T->val);
T = T->right;
}
return ans;
}
};
LeedCode OJ --- Binary Tree Inorder Traversal的更多相关文章
- LeetCode OJ——Binary Tree Inorder Traversal
http://oj.leetcode.com/problems/binary-tree-inorder-traversal/ 树的中序遍历,递归方法,和非递归方法. /** * Definition ...
- 37. Binary Tree Zigzag Level Order Traversal && Binary Tree Inorder Traversal
Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversa ...
- LeetCode: Binary Tree Inorder Traversal 解题报告
Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' values ...
- LintCode Binary Tree Inorder Traversal
Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' values ...
- 3月3日(4) Binary Tree Inorder Traversal
原题: Binary Tree Inorder Traversal 和 3月3日(2) Binary Tree Preorder Traversal 类似,只不过变成中序遍历,把前序遍历的代码拿出来, ...
- 49. leetcode 94. Binary Tree Inorder Traversal
94. Binary Tree Inorder Traversal 二叉树的中序遍历 递归方法: 非递归:要借助栈,可以利用C++的stack
- [leetcode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历
题目大意 https://leetcode.com/problems/binary-tree-inorder-traversal/description/ 94. Binary Tree Inorde ...
- [线索二叉树] [LeetCode] 不需要栈或者别的辅助空间,完成二叉树的中序遍历。题:Recover Binary Search Tree,Binary Tree Inorder Traversal
既上篇关于二叉搜索树的文章后,这篇文章介绍一种针对二叉树的新的中序遍历方式,它的特点是不需要递归或者使用栈,而是纯粹使用循环的方式,完成中序遍历. 线索二叉树介绍 首先我们引入“线索二叉树”的概念: ...
- 【LeetCode】94. Binary Tree Inorder Traversal (3 solutions)
Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' values ...
随机推荐
- spring中关于<context:component-scan>的使用说明
通常情况下我们在创建spring项目的时候在xml配置文件中都会配置这个标签,配置完这个标签后,spring就会去自动扫描base-package对应的路径或者该路径的子包下面的java文件,如果扫描 ...
- jsp中 url传参到后台的参数获取
datagrid传值url方法1:<input type="hidden" id="sortid"> <table id="dg&q ...
- Jquery选择器总结一
jquery 是javaScript框架,封装了js. 好处:使用方便,少代码多功能. 实现同一个功能的代码量少. 屏蔽浏览器差异. 简化ajax开发. 选择器 基本选择器 1. id选择器 $(&q ...
- javascript date utc
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangbin10025/article/details/37503465 近期在使用highsto ...
- Redis源码解析:28集群(四)手动故障转移、从节点迁移
一:手动故障转移 Redis集群支持手动故障转移.也就是向从节点发送"CLUSTER FAILOVER"命令,使其在主节点未下线的情况下,发起故障转移流程,升级为新的主节点,而原 ...
- CF549G Happy Line
传送门 解题思路 题意大概就是给你个数列,你可以随意交换i,i+1,交换后位于第i+1位的数字+1,位于第i位的数字-1,问最终能否形成一个不下降序列并输出.设初始数列中两个位置x,y最终交换后的位置 ...
- 移动端适配(rem单位定义方法)
注:移动端必须写: <meta name="viewport" content="width=device-width, user-scalable=no, ini ...
- 傻瓜式教程--实现登录页面的验证码以及验证(VUE)
做成之后就 是这个样子 接下来上代码创建一个组件.显示验证码图片 <template> <div class="s-canvas"> <canvas ...
- [转]json对象详解
json(javascript object notation)全称是javascript对象表示法,它是一种数据交换的文本格式,而不是一种编程语言,用于读取结构化数据.2001年由Douglas C ...
- Mac+Webstorm 双更新后 webstorm无法使用内置svn
我终于营业了!!!!!! EachTime!!!! 我更新了mac系统后,就会莫名其妙的webstorm的svn无法使用 具体表现为无法更新和提交 具体报错为:Can't use Subversion ...