欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

[Java]将二叉树的左右子树交换 非递归实现

发布时间:2024/1/23 java 57 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [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]将二叉树的左右子树交换 非递归实现的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。