首页 > 编程知识 正文

层次遍历二叉树算法,根据两种遍历确定二叉树

时间:2023-05-04 05:00:18 阅读:15147 作者:459

1、二叉树的顺序扫描可以使用递归和迭代的方法。 本质都是使用堆栈数据结构。 区别有递归的时候按照问题中的要求顺序写。 例如,这里94二叉树的中序扫描(顺序为左中右)代码如下。

voidtraversal(treenode*cur,vector vec ) {

if(cur==null )返回;

三足动物(Cur-left,vec ); //左

VEC.push_back(cur-val; //中

traversal(cur-right,vec ); //右

}

主控:

向量结果;

traversal (根,结果);

返回结果;

反复时必须颠倒顺序。 因为是堆栈结构,所以进去的时候是右中左,出来的时候是问题要求的左中右。 代码如下。

向量结果;

堆叠趋势科技* ST; if (路线!=NULL ) ST.push (根); while (! st.empty () ) {TreeNode* node=st.top; If (节点!=NULL () { st.pop; if (节点光) ST.push )节点光; //右ST.push(node ); ST.push (空; //中if (节点左) ST.push )节点左; //左(else(ST.pop ); node=st.top (; st.pop (; result.push_back(node-val ); }

返回结果;

2、层序横移(功率按钮102 )使用排队数据结构,因为考虑边进边出。 代码如下。

队列树*队列;

if (路线!=NULL ) que.push (根);

向量向量结果;

while (! que.empty () )

int size=que.size (;

向量向量;

for(intI=0; i size; I ) {

TreeNode* node=que.top (;

que.pop :

vec.push _ back (节点- val;

if (节点左) que.push )节点左;

if (节点光) que.push )节点光;

}

result.push_back(vec;

}

返回结果;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。