点击打开题目链接

今天只是写了递归的版本,因为还没想好怎么用迭代来实现,可以写的过程中,有一点是有疑问的,虽然我的代码可以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的更多相关文章

  1. LeetCode OJ——Binary Tree Inorder Traversal

    http://oj.leetcode.com/problems/binary-tree-inorder-traversal/ 树的中序遍历,递归方法,和非递归方法. /** * Definition ...

  2. 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 ...

  3. LeetCode: Binary Tree Inorder Traversal 解题报告

    Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' values ...

  4. LintCode Binary Tree Inorder Traversal

    Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' values ...

  5. 3月3日(4) Binary Tree Inorder Traversal

    原题: Binary Tree Inorder Traversal 和 3月3日(2) Binary Tree Preorder Traversal 类似,只不过变成中序遍历,把前序遍历的代码拿出来, ...

  6. 49. leetcode 94. Binary Tree Inorder Traversal

    94. Binary Tree Inorder Traversal    二叉树的中序遍历 递归方法: 非递归:要借助栈,可以利用C++的stack

  7. [leetcode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历

    题目大意 https://leetcode.com/problems/binary-tree-inorder-traversal/description/ 94. Binary Tree Inorde ...

  8. [线索二叉树] [LeetCode] 不需要栈或者别的辅助空间,完成二叉树的中序遍历。题:Recover Binary Search Tree,Binary Tree Inorder Traversal

    既上篇关于二叉搜索树的文章后,这篇文章介绍一种针对二叉树的新的中序遍历方式,它的特点是不需要递归或者使用栈,而是纯粹使用循环的方式,完成中序遍历. 线索二叉树介绍 首先我们引入“线索二叉树”的概念: ...

  9. 【LeetCode】94. Binary Tree Inorder Traversal (3 solutions)

    Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' values ...

随机推荐

  1. spring中关于<context:component-scan>的使用说明

    通常情况下我们在创建spring项目的时候在xml配置文件中都会配置这个标签,配置完这个标签后,spring就会去自动扫描base-package对应的路径或者该路径的子包下面的java文件,如果扫描 ...

  2. jsp中 url传参到后台的参数获取

    datagrid传值url方法1:<input type="hidden" id="sortid"> <table id="dg&q ...

  3. Jquery选择器总结一

    jquery 是javaScript框架,封装了js. 好处:使用方便,少代码多功能. 实现同一个功能的代码量少. 屏蔽浏览器差异. 简化ajax开发. 选择器 基本选择器 1. id选择器 $(&q ...

  4. javascript date utc

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangbin10025/article/details/37503465 近期在使用highsto ...

  5. Redis源码解析:28集群(四)手动故障转移、从节点迁移

    一:手动故障转移 Redis集群支持手动故障转移.也就是向从节点发送"CLUSTER  FAILOVER"命令,使其在主节点未下线的情况下,发起故障转移流程,升级为新的主节点,而原 ...

  6. CF549G Happy Line

    传送门 解题思路 题意大概就是给你个数列,你可以随意交换i,i+1,交换后位于第i+1位的数字+1,位于第i位的数字-1,问最终能否形成一个不下降序列并输出.设初始数列中两个位置x,y最终交换后的位置 ...

  7. 移动端适配(rem单位定义方法)

    注:移动端必须写: <meta name="viewport" content="width=device-width, user-scalable=no, ini ...

  8. 傻瓜式教程--实现登录页面的验证码以及验证(VUE)

    做成之后就 是这个样子 接下来上代码创建一个组件.显示验证码图片 <template> <div class="s-canvas"> <canvas ...

  9. [转]json对象详解

    json(javascript object notation)全称是javascript对象表示法,它是一种数据交换的文本格式,而不是一种编程语言,用于读取结构化数据.2001年由Douglas C ...

  10. Mac+Webstorm 双更新后 webstorm无法使用内置svn

    我终于营业了!!!!!! EachTime!!!! 我更新了mac系统后,就会莫名其妙的webstorm的svn无法使用 具体表现为无法更新和提交 具体报错为:Can't use Subversion ...