Binary Tree Inorder Traversal
来源:互联网 发布:最新版球球代点网源码 编辑:程序博客网 时间:2024/06/06 11:43
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,3,2].
思路:二叉树中序遍历。如果节点不为NULL的话,先访问这个节点的left节点,再访问当前节点,最后访问right节点。
方法一:递归的方式来解决
/** * 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>res; if(!root) return res; inorder(root,res); return res; } void inorder(TreeNode*root,vector<int>&res) { if(root) { inorder(root->left,res); res.push_back(root->val); inorder(root->right,res); } } };方法二:使用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) { stack<TreeNode*>stk; vector<int>res; TreeNode *proot=root; while(proot||!stk.empty()) { if(proot) { stk.push(proot); proot=proot->left; } else { proot=stk.top(); res.push_back(proot->val); stk.pop(); proot=proot->right; } } return res; }};
方法三:使用morris遍历的方式。可以达到空间复杂度o(1).
/** * 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) { //morris vector<int>res; TreeNode *cur=root,*pre=NULL; while(cur) { if(cur->left==NULL)//如果当前节点的左子树为空,则输出当前节点,当前节点设置为节点的右子树的根节点 { res.push_back(cur->val); cur=cur->right; } else { pre=cur->left; while(pre->right&&pre->right!=cur) pre=pre->right; //pre 为当前节点在中序遍历下的前驱节点 if(pre->right==NULL) { pre->right=cur; cur=cur->left; } else { pre->right=NULL; res.push_back(cur->val); cur=cur->right; } } } return res; }};
0 0
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal
- javascript动画-鼠标移动到时透明度渐变
- 349. Intersection of Two Arrays
- 一点一点学写Makefile(3)-增加第三方库和头文件
- B001-Atmega16-定时器2-(ques=4)
- Android 签名发布 签名脚本
- Binary Tree Inorder Traversal
- CC2530之UART串口通信
- jdk源码分析之LinkedHashMap
- javaNIO学习笔记之缓冲区Buffer
- charles使用教程指南
- React Native跨平台代码说明
- 简单动画
- Android Studio中如何使用Git和Github来管理项目
- ListView滚动方向和滚动位置的探索