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;
}
返回结果;