首页 > 编程知识 正文

二叉树的遍历c语言代码,使用栈遍历二叉树

时间:2023-05-04 09:10:00 阅读:25461 作者:4588

虽然遍历二叉树通常使用递归,但在堆栈中遍历也是一个不错的方法。

二叉树中包含class Node{public int val; 公共节点左; 公共节点权限; 公共节点(intv ) {val=v; 左=空; right=null; }公共类主{公共staticvoidmain (字符串[ ] args ) nodehead=newnode )0); 节点1=新节点(1; 节点2=新节点(2; 节点3=新节点(3; 节点4=新节点(4; 节点5=新节点(5; 节点节点6=新节点(6; head.left=node1; head.right=node2; node1.left=node3; node1.right=node4; 节点2.left=node 5; 节点2.right=node 6; pos2(头); pos1(头); 输入(头; }

循序渐进地追寻思考和过程

如果存在弹出打印右边的子树,则存在压入左边的子树,则压入publicstaticvoidpos1(nodeh ) ({System.out.print ) ); if(h!=null (堆栈堆栈=新堆栈); sack.push(h; while (! stack.isEmpty () {h=stack.pop ); system.out.print(h.val ' ); if(h.right!=空(stack.push ) h.right ); (if ) h.left!=空(stack.push ) h.left ); }}}System.out.println (; )后相遍历的前相遍历的顺序为父节点、左、右,后相遍历的顺序为左、右、父节点,也就是说,前相遍历的左右互换后与后相遍历的顺序相反。 因此,只需调换上一次遍历时左右子节点堆栈的顺序,将其存储在另一个堆栈中,然后弹出,即可完成后续遍历。 这个代码不怎么写。

中顺扫描的思路与流程

弹出窗口不满足打印整个左边距并按顺序放入堆栈的条件,开始弹出打印,在右部分树publicstaticvoidin(nodeh ) {System.out.print中按顺序遍历); if(h!=null (堆栈堆栈=新堆栈); while (! sack.isempty(||h!=空(if ) h!=null () stack.push ) ) h; h=h.left; (else ) h=stack.pop ); system.out.print(h.val ' ); h=h.right; }}}System.out.println (; }后的遍历变化由一个堆栈实现

作为思路,左节点未处理则处理左节点,左节点处理则处理右节点,右节点处理则返回。

publicstaticvoidpos2(nodeh ) {if ) h!=null (堆栈堆栈=新堆栈); sack.push(h; 节点c=null; //用c记录最后打印的节点while (stack.isempty () ) {c=stack.peek ); if(c.left!=nullh!=c.lefth!=c.right () stack.push ) ) c.left; }elseif(c.right!=nullh!==c.right () stack.push ) ) c.right; } else { system.out.print (stack.pop ().val ' ); h=c; //记录这次打印的节点} }打印结果

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