二叉树的中序,后序遍历,对下图所示的二叉树进行中序遍历
BM24二叉树的中序遍历
描述给定二叉树的根节点root,并返回其中序遍历结果。
数据范围:满足树上的节点数,满足树上每个节点的值。
高级:空间复杂性,时间复杂性
示例1输入:
{1,2,#,#,3}
复制返回值:
[2,3,1]复制说明:
2示例输入:
{}复制返回值:
[]
3示例输入:
{1,2}返回值:
[2,1]
示例4输入:
{1,#,2}复制返回值:
[1,2]
解决递归问题# include bits/stdc . h
定义树结构
{
int val
struct TreeNode * left
struct TreeNode * right
TreeNode(int x) : val(x),left(nullptr),right(nullptr) {}
};
void in_order_r(TreeNode *root,std:vector int v)
{
if (root==nullptr)
{
返回;
}
in_order_r(根左,v);
v . push _ back(root-val);
in_order_r(根右,v);
}
STD:vector int in order traversal(TreeNode * root)
{
STD:vector int v;
in_order_r(根,v);
回归v;
}
非递归求解中顺序遍历的非递归实现
按照中间顺序遍历的顺序,对于任何一个节点,首先访问它的左子节点,左子节点可以看作一个节点。然后,将访问左侧子节点为空的节点,然后按照相同的规则访问其右侧子树。因此,处理过程如下:
1)如果当前节点不为空,它将首先被放入堆栈。如果它的左节点不为空,它将被设置为它的左节点,直到当前节点为空。2)如果栈不为空,则取栈顶元素并访问,然后将当前节点设置为其右节点。3)直到当前节点为空,堆栈为空,遍历才会结束。注意:中序遍历有一个回溯过程,所以不要把代码写成递归~ ~
void in _ order _ transfer(TreeNode * root,std:vector int v)
{
STD:stack TreeNode * s;
auto node=root
而(!s.empty() node!=nullptr)
{
while(节点!=nullptr)
{
s.push(节点);
node=节点-左侧;
}
如果(!s.empty()
{
node=s . top();
s . pop();
v . push _ back(node-val);
node=节点右;//将当前节点的右节点作为
}
}
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。