【Leetcode】【hard】Binary Tree Postorder Traversal
2015-06-30 04:29
344 查看
Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree
return
解题:
二叉树的后序遍历,比先序和中序遍历稍显麻烦一些,有兴趣可查看:二叉树先序遍历、二叉树中序遍历
后序遍历需要输出左子树后,输出右子树,最后输出当前结点。复杂的原因是,输出左右子树后,如何判断输出的结点是左还是右。如果左结点已经输出,就继续输出右;如果右结点已经输出,就输出当前结点,并pop出栈中上一层的结点继续考察。因此,后序遍历和先中序遍历代码上主要不同是:
1、引入lastNode指针,指向刚刚输出的结点,方便判断刚刚输出的结点是上一层的左儿子还是右儿子;
2、如果一个结点,连同其左子树和右子树都已经输出完毕,应继续pop栈中元素,但是新pop出的结点,在下一次循环中不应再循环遍历其左子树。
因此在一个结点连同其子树都输出完毕后,将curNode置为0,这样跳过循环头部的“循环查找左子树”过程之后再pop栈中元素,从而直接进入判定阶段。
代码:
For example:
Given binary tree
{1,#,2,3},
1 \ 2 / 3
return
[3,2,1].
解题:
二叉树的后序遍历,比先序和中序遍历稍显麻烦一些,有兴趣可查看:二叉树先序遍历、二叉树中序遍历
后序遍历需要输出左子树后,输出右子树,最后输出当前结点。复杂的原因是,输出左右子树后,如何判断输出的结点是左还是右。如果左结点已经输出,就继续输出右;如果右结点已经输出,就输出当前结点,并pop出栈中上一层的结点继续考察。因此,后序遍历和先中序遍历代码上主要不同是:
1、引入lastNode指针,指向刚刚输出的结点,方便判断刚刚输出的结点是上一层的左儿子还是右儿子;
2、如果一个结点,连同其左子树和右子树都已经输出完毕,应继续pop栈中元素,但是新pop出的结点,在下一次循环中不应再循环遍历其左子树。
因此在一个结点连同其子树都输出完毕后,将curNode置为0,这样跳过循环头部的“循环查找左子树”过程之后再pop栈中元素,从而直接进入判定阶段。
代码:
/** * 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> postorderTraversal(TreeNode* root) { TreeNode* curNode = root; TreeNode* lastNode = NULL; stack<TreeNode *> nodes; vector<int> res; while (curNode != NULL || !nodes.empty()) { while (curNode) { nodes.push(curNode); curNode = curNode->left; } curNode = nodes.top(); if (curNode->right && curNode->right != lastNode) { curNode = curNode->right; } else { res.push_back(curNode->val); lastNode = curNode; nodes.pop(); curNode = NULL; } } return res; } };
相关文章推荐
- House Robber
- PMC Flashtec + Memblaze PBlaze 4 = 性能惊人的NVM Express SSD!
- UML期末复习题——2.5:System Sequence Diagram & Post-condition
- summary ranges
- CentOS 6.5配置nfs服务
- CentOS 6.5配置nfs服务
- linux操作系下RAR的使用
- linux操作系下RAR的使用
- BLOB二进制对象(blob.c/h)
- BLOB二进制对象(blob.c/h)
- Tomato-Dualwan的强大功能
- Tomato-Dualwan的强大功能
- 崇拜无线路由天线增益功率的 兄弟看过来
- 崇拜无线路由天线增益功率的 兄弟看过来
- (转)maven自动部署web项目到tomcat8(向下兼容7)
- maven构建java web项目(eclipse原理同)
- 庭用户电信百兆光纤
- 庭用户电信百兆光纤
- 机房工程
- 机房工程