[Java]将二叉树的左右子树交换 非递归实现
生活随笔
收集整理的這篇文章主要介紹了
[Java]将二叉树的左右子树交换 非递归实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[java]?view plaincopy
package?dataStruct;?? ?? import?java.util.Stack;?? ?? /**? ?*?將二叉樹的左右子樹交換?非遞歸實現? ?*?@author?YangYi? ?*/?? public?class?SwapTree?{?? ????private?static?Stack<Node>?stack?=?new?Stack<Node>();?? ?? ????public?static?void?main(String?args[])?{?? ????????Node?root?=?buildTree();?? ????????inOrderVisit(root);?? ????????swapTree(root);?? ????????System.out.println();?? ????????inOrderVisit(root);?? ????}?? ?? ????public?static?void?inOrderVisit(Node?root)?{?? ????????if?(root?==?null)?? ????????????return;?? ????????inOrderVisit(root.left);?? ????????System.out.print(root.data);?? ????????inOrderVisit(root.right);?? ????}?? ?? ????public?static?void?swapTree(Node?root)?{?? ????????if?(root?==?null)?? ????????????return;?? ?? ????????Node?temp?=?null;?? ?? ????????stack.push(root);?? ????????while?(!stack.isEmpty())?{?? ????????????Node?node?=?stack.peek();?? ?? ????????????if?(node.left?==?null?&&?node.right?==?null)?{?? ????????????????node.visited?=?true;?? ????????????????stack.pop();?? ????????????????continue;?? ????????????}?? ?? ????????????if?(node.left?!=?null)?{?? ????????????????if?(!node.left.visited)?{?? ????????????????????stack.push(node.left);?? ????????????????}?? ????????????}?? ?? ????????????if?((node.left?==?null?||?node.left.visited)?&&?node.right?!=?null)?{?? ????????????????if?(!node.right.visited)?{?? ????????????????????stack.push(node.right);?? ????????????????}?? ????????????}?? ?? ????????????if?((node.left?==?null?||?node.left.visited)?? ????????????????????&&?(node.right?==?null?||?node.right.visited))?{?? ????????????????temp?=?node.left;?? ????????????????node.left?=?node.right;?? ????????????????node.right?=?temp;?? ????????????????node.visited?=?true;?? ????????????????stack.pop();?? ????????????}?? ????????}?? ????}?? ?? ????public?static?Node?buildTree()?{?? ????????Node?root?=?new?Node();?? ????????root.data?=?1;?? ?? ????????Node?temp?=?new?Node();?? ????????temp.data?=?2;?? ????????root.left?=?temp;?? ?? ????????temp?=?new?Node();?? ????????temp.data?=?3;?? ????????root.right?=?temp;?? ?? ????????temp?=?new?Node();?? ????????temp.data?=?4;?? ????????root.right.right?=?temp;?? ?? ????????temp?=?new?Node();?? ????????temp.data?=?5;?? ????????root.left.right?=?temp;?? ?? ????????temp?=?new?Node();?? ????????temp.data?=?6;?? ????????root.left.right.right?=?temp;?? ?? ????????return?root;?? ????}?? }?? ?? class?Node?{?? ????boolean?visited?=?false;?? ????int?data?=?0;?? ????Node?left?=?null;?? ????Node?right?=?null;?? } ?
總結
以上是生活随笔為你收集整理的[Java]将二叉树的左右子树交换 非递归实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL经典面试题及答案
- 下一篇: Java 多线程 并发编程------超