博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Binary Tree Postorder Traversal --二叉树非递归后序遍历(重重)
阅读量:4108 次
发布时间:2019-05-25

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

问题:

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

For example:
Given binary tree {1,#,2,3},

1    \     2    /   3

return [3,2,1].

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

解答:

要保证根结点在左孩子和右孩子访问之后才能访问,因此对于任一结点P,先将其入栈。如果P不存在左孩子和右孩子,则可以直接访问它;或者P存在左孩子或者右孩子,但是其左孩子和右孩子都已被访问过了,则同样可以直接访问该结点。若非上述两种情况,则将P的右孩子和左孩子依次入栈,这样就保证了每次取栈顶元素的时候,左孩子在右孩子前面被访问,左孩子和右孩子都在根结点前面被访问。

采用pre 记录上一个被访问的节点代表左右子树,依据是: 左右子节点一定是和父节点相邻访问。

 参考:

代码:

/** * 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
postorderTraversal(TreeNode *root) { stack
st; vector
result; if(root != NULL) st.push(root); TreeNode *pre = NULL; TreeNode *cur; while(!st.empty()) { cur = st.top(); if((cur->left == NULL && cur->right == NULL) ||(pre != NULL &&(pre == cur->left || pre == cur->right))) { result.push_back(cur->val); st.pop(); pre = cur; } else { if(cur->right != NULL) st.push(cur->right); if(cur->left != NULL) st.push(cur->left); } } return result; }};

转载地址:http://aktsi.baihongyu.com/

你可能感兴趣的文章
JavaSE_day_03 方法
查看>>
day-03JavaSE_循环
查看>>
Mysql初始化的命令
查看>>
day_21_0817_Mysql
查看>>
day-22 mysql_SQL 结构化查询语言
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
HTML&CSS进阶
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
MySQL-分布式架构-MyCAT
查看>>
设计模式六大原则(6):开闭原则
查看>>
阿里面试总结--JAVA
查看>>
Servlet的生命周期
查看>>
JAVA八大经典书籍,你看过几本?
查看>>
《读书笔记》—–书单推荐
查看>>