当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

将二叉树所有结点的左右子树交换并输出。

发表于: 2012-08-23   作者:128kj   来源:转载   浏览:
摘要: import java.util.*; public class BinaryTree { protected Node root; public BinaryTree(Node root) { this.root = root; }
import java.util.*;      
     
public class BinaryTree {      
    protected Node root;      
     
    public BinaryTree(Node root) {      
        this.root = root;      
    }      
     
    public Node getRoot() {      
        return root;      
    }      
     
    /** 构造树 */     
    public static Node init() {      
        Node a = new Node('A');      
        Node b = new Node('B', null, a);      
        Node c = new Node('C');      
        Node d = new Node('D', b, c);      
        Node e = new Node('E');      
        Node f = new Node('F', e, null);      
        Node g = new Node('G', null, f);      
        Node h = new Node('H', d, g);      
        return h;// root      
    }      
     
    /** 访问节点 */     
    public static void visit(Node p) {      
        System.out.print(p.getKey() + " ");      
    }      
     
    /** 递归实现前序遍历 */     
     static void preorder(Node p) {      
        if (p != null) {      
            visit(p);      
            preorder(p.getLeft());      
            preorder(p.getRight());      
        }      
    }      
     
  
  
   /** 层次遍历*/  
   static void levelorder(Node p){      
        if(p==null) return;      
        Queue<Node> queue=new LinkedList<Node>();      
        queue.offer(p);      
        while(queue.size()>0){      
            Node temp=queue.poll();      
            visit(temp);    
            if(temp.getLeft()!=null){      
                queue.offer(temp.getLeft());      
            }      
            if(temp.getRight()!=null){      
                queue.offer(temp.getRight());      
            }      
        }      
          
    }      
  
   //将二叉树所有结点的左右子树交换   
  
static void swapTree(Node root){   
  
  if(root != null) {   
  
   Node tmp = root.getLeft();   
   root.setLeft(root.getRight());   
   root.setRight(tmp);   
  
   swapTree(root.getLeft());   
   swapTree(root.getRight());   
  
  }   
}   

  
  //输出二叉树的嵌套括号表示
  
   static void display(Node tree){
      if(tree!=null){
        System.out.printf("%c",tree.getKey());
        if(tree.getLeft()!=null||tree.getRight()!=null){
            System.out.printf("(");
            display(tree.getLeft());
            if(tree.getRight()!=null)
               System.out.printf(",");
            display(tree.getRight());
            System.out.printf(")");
         }
      }
    }

  
    /**    
     * @param args    
     */     
    public static void main(String[] args) {      
        BinaryTree tree = new BinaryTree(init());     
       
        display(tree.getRoot());
        System.out.printf("\n\n");
        swapTree(tree.getRoot());
        display(tree.getRoot());
  
        
    }       
     
} 

  public class Node {      
    private char key;      
    private Node left, right;      
     
    public Node(char key) {      
        this(key, null, null);      
    }      
     
    public Node(char key, Node left, Node right) {      
        this.key = key;      
        this.left = left;      
        this.right = right;      
    }      
     
    public char getKey() {      
        return key;      
    }      
     
    public void setKey(char key) {      
        this.key = key;      
    }      
     
    public Node getLeft() {      
        return left;      
    }      
     
    public void setLeft(Node left) {      
        this.left = left;      
    }      
     
    public Node getRight() {      
        return right;      
    }      
     
    public void setRight(Node right) {      
        this.right = right;      
    }      
}   
  

运行结果:
H(D(B(,A),C),G(,F(E)))

H(G(F(,E)),D(C,B(A)))
下载源码:

将二叉树所有结点的左右子树交换并输出。

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
早上起来后,决定把昨天的第二题解决一下,当时我都不知道完全二叉树的概念,所以今天就上度娘理解
// 输出二叉树中所有从根结点到叶子结点的路径.cpp : 定义控制台应用程序的入口点。 #include "stda
输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树
与该题的一道相似题为:求二叉树中结点的最长距离。两题看似有联系,但是做法不同。 首先回顾一下:
之前看到的一道题目。想了一下,借助队列用层次遍历。过程 1、把根结点入队列 2、如果队列非空,重
http://blog.csdn.net/randyjiawenjie/article/details/6772145 看看思路,下面的小bug还比较多 二
二叉树的下一个结点 参与人数:831时间限制:1秒空间限制:32768K 通过比例:26.00% 最佳记录:0 ms
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD>
有时候需要访问TreeView中的所有结点,在所有结点中查找相关信息。 下面给出递归的遍历所有结点的代
前段时间 论坛的一个帖子http://topic.csdn.net/u/20080706/10/24331390-5522-400d-a557-8d719869af6
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号