博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode: Binary Tree Inorder Traversal
阅读量:5242 次
发布时间:2019-06-14

本文共 1810 字,大约阅读时间需要 6 分钟。

Given a binary tree, return the inorder traversal of its nodes' values.

For example:

Given binary tree {1,#,2,3},

1    \     2    /   3

 

return [1,3,2].

Note: Recursive solution is trivial, could you do it iteratively?

分析:迭代版inorder traversal。对于任何一棵树,其最先被访问的是路径是最左侧的路径,在该最左侧路径上访问顺序呢是从叶子结点到根节点,很自然我们可以用一个stack保存这个路径。同时如果当前访问结点有右孩子,我们需把以右孩子为根的子树最左路径压入栈中。时间复杂度为O(n),空间复杂度为O(h)。代码如下:

1 class Solution { 2 public: 3     vector
inorderTraversal(TreeNode *root) { 4 vector
result; 5 if(!root) return result; 6 7 stack
S; 8 for(TreeNode *p = root; p; p = p->left) 9 S.push(p);10 11 while(!S.empty()){12 TreeNode *tmp = S.top();13 S.pop();14 result.push_back(tmp->val);15 for(TreeNode *p = tmp->right; p ; p = p->left)16 S.push(p);17 }18 19 return result;20 }21 };

 Morris中序遍历:

class Solution {public:    vector
inorderTraversal(TreeNode *root) { vector
result; TreeNode * prev = NULL, *cur = root; while(cur != NULL){ if(cur->left == NULL){ result.push_back(cur->val); cur = cur->right; }else{ for(prev = cur->left; prev->right != NULL && prev->right != cur; prev = prev->right); if(prev->right == NULL){ prev->right = cur; cur = cur->left; }else{ prev->right = NULL; result.push_back(cur->val); cur = cur->right; } } } return result; }};

 

转载于:https://www.cnblogs.com/Kai-Xing/p/4143756.html

你可能感兴趣的文章
深入浅出JavaScript(2)—ECMAScript
查看>>
编程珠玑第十一章----排序
查看>>
Face The Right Way POJ - 3276 (开关问题)
查看>>
STEP2——《数据分析:企业的贤内助》重点摘要笔记(六)——数据描述
查看>>
变量的命名规范
查看>>
手机端自动跳转
查看>>
react中进入某个详情页URL路劲参数Id获取问题
查看>>
首届.NET Core开源峰会
查看>>
ViewPager的onPageChangeListener里面的一些方法参数:
查看>>
Jenkins关闭、重启,Jenkins服务的启动、停止方法。
查看>>
CF E2 - Array and Segments (Hard version) (线段树)
查看>>
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
查看>>
SIGPIPE并产生一个信号处理
查看>>
CentOS
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>
爬虫-通用代码框架
查看>>
2019春 软件工程实践 助教总结
查看>>
YUV 格式的视频呈现
查看>>
Android弹出框的学习
查看>>