树的后序遍历与对应二叉树的,请描述下面这个二叉树的后序遍历结果
BM25二叉树的后序遍历
树递归dfs广度优先搜索(BFS)
描述一个给定的二叉树,并返回它遍历的序列。
后遍历是按照左节点-右节点-根节点的顺序遍历值。
数据范围:二叉树的节点数满足,二叉树的节点值满足,树中每个节点的值不一样。
数字
示例1输入:
{1,#,2,3}复制返回值:
[3,2,1]复制说明:
如主题地图示例2所示:
{1}复制返回值:
[1]递归实现问题解决方案的# include bits/stdc . h。
定义树结构
{
int val
struct TreeNode * left
struct TreeNode * right
TreeNode(int x) : val(x),left(nullptr),right(nullptr) {}
};
void post_order_r(TreeNode *root,std:vector int v)
{
if (root==nullptr)
{
返回;
}
post_order_r(根左,v);
post_order_r(根右,v);
v . push _ back(root-val);
}
STD:vector int postorderTraversal(TreeNode * root)
{
STD:vector int v;
post_order_r(根,v);
回归v;
}
非递归实现后续遍历的非递归实现的思路其实和递归实现是一样的。
1.如果当前节点不为空,且其左右节点均为空,则访问该节点(当前节点为叶节点)。2.如果当前节点的任何左右节点不为空,则左右节点将被连续堆叠。3.重复上述操作。如果当前节点的左右任一节点是最后访问的节点,则表示其左右节点都被访问过。可以直接访问这个节点,然后弹出这个节点。
void post _ order _ transfer(TreeNode * root,std:vector int v)
{
if (root==nullptr)
{
返回;
}
STD:stack TreeNode * s;
s.push(根);
TreeNode * pre _ node=nullptr
而(!s.empty()
{
auto node=s . top();
if(node-left==nullptr node-right==nullptr)
{
v . push _ back(node-val);
pre_node=节点;
s . pop();
}
else if (pre_node!=nullptr(node-left==pre _ node node-right==pre _ node))
{
v . push _ back(node-val);
pre_node=节点;
s . pop();
}
其他
{
如果(节点——对!=nullptr)
{
s.push(节点右移);
}
if (node- left!=nullptr)
{
s.push(节点向左);
}
}
}
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。