二叉树的后序,给定二叉树的两种遍历序列 前序dacebhfg
BM23二叉树的前序遍历
树递归dfs广度优先搜索(BFS)
描述你的二叉树的根节点root,并返回其节点值的前序遍历。数据范围:二叉树的节点数满足,二叉树的节点值满足,树中每个节点的值不一样。
示例1:
示例1输入:
{1,#,2,3}
复制返回值:
[1,2,3]
遍历问题前言:先访问根节点,再访问左节点,最后访问右节点。这里提供了递归和非递归实现的两个版本。
# include bits/stdc . h的递归实现
定义树结构
{
int val
struct TreeNode * left
struct TreeNode * right
TreeNode(int x) : val(x),left(nullptr),right(nullptr) {}
};
void pre_order_r(TreeNode *root,std:vector int v)
{
if (root==nullptr)
{
返回;
}
v . push _ back(root-val);
pre_order_r(根左,v);
pre_order_r(根右,v);
}
类别解决方案
{
公共:
STD:vector int preorder traversal _ r(TreeNode * root)
{
STD:vector int v;
pre_order_r(根,v);
回归v;
}
};在stack的帮助下,非递归实现首先将根节点放入堆栈,然后访问堆栈的顶部元素。如果该元素的右节点不为空,则将右节点推送到堆栈中;如果左侧节点不为空,它将左侧节点放入堆栈,然后将顶部元素推出堆栈。重复此过程,直到堆栈为空。
void pre _ order _ transfer(TreeNode * root,std:vector int v)
{
if (root==nullptr)
{
返回;
}
STD:stack TreeNode * s;
s.push(根);
而(!s.empty()
{
auto node=s . top();
s . pop();
v . push _ back(node-val);
如果(节点——对!=nullptr)
{
s.push(节点右移);
}
if (node- left!=nullptr)
{
s.push(节点向左);
}
}
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。