94. Binary Tree Inorder Traversal
2016-07-20 15:45
387 查看
题目:Binary Tree Inorder Traversal
原题链接:https://leetcode.com/problems/binary-tree-inorder-traversal/Given a binary tree, return the inorder traversal of its nodes’ values.
For example:
Given binary tree [1,null,2,3],
1
\
2
/
3
return [1,3,2].
Note: Recursive solution is trivial, could you do it iteratively?
求二叉树中序遍历的结果,用递归和非递归的方式。
递归方式:按照中序遍历的顺序来递归就可以了
代码:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void inOrder(TreeNode* root, vector<int>& ans) { if(root == NULL) return; inOrder(root -> left, ans); ans.push_back(root -> val); inOrder(root -> right, ans); } vector<int> inorderTraversal(TreeNode* root) { vector<int> ans; inOrder(root, ans); return ans; } };
非递归方式:用栈(stack),中序遍历的输出依次是左子树、根节点、右子树,从根节点开始一路往左子树遍历下去,并把途中所有经过的节点入栈,然后弹出一个节点,这个节点就是当前的最左节点,输出它的值,然后把它的右子树按照一路遍历左子树的方式再入栈,一直到栈空。
代码如下:
/** * Definition for a binary tree node. * 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; stack<TreeNode*> st; while(root != NULL) { st.push(root); root = root -> left; } while(!st.empty()) { TreeNode* top = st.top(); st.pop(); ans.push_back(top->val); top = top -> right; while(top) { st.push(top); top = top -> left; } } return ans; } };
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 文件遍历排序函数
- Lua 学习笔记之C API 遍历 Table实现代码
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- C#中遍历Hashtable的4种方法
- C++联合体转换成C#结构的实现方法
- Erlang中遍历取出某个位置的最大值代码
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结