求二叉树的镜像

来源:互联网 发布:快速通过精算师 知乎 编辑:程序博客网 时间:2024/06/05 15:25
import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Queue;public class BinaryTree {private Node root;public void print(){if(this.root!=null){this.root.print();}}public List<Node> breadFirst(){List<Node> list=new ArrayList<Node>();Queue<Node> queue=new ArrayDeque<Node>();if(root!=null){queue.add(root);}while(!queue.isEmpty()){list.add(queue.peek());Node node=queue.poll();if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}}return list;}public List<Node> breadFirst2(){List<Node> list=new ArrayList<>();Queue<Node> queue=new ArrayDeque<>();if(root!=null){queue.offer(root);}while(!queue.isEmpty()){list.add(queue.peek());Node curren=queue.poll();if(curren.left!=null){queue.offer(curren.left);}if(curren.right!=null){queue.offer(curren.right);}}return list;}/**             5           镜像后          5 *             / \                        / \  *            3   7                      7  3 *           /\   /\                    /\  /  *          2  4  6                    4  2 6  *         /                          / \  *         1                             1       * @param root */public static void preOrder(Node root){if(root==null){return;}Node temp=root.left;root.left=root.right;root.right=temp;preOrder(root.left);preOrder(root.right);}public List<Node> midPrint(Node node){List<Node> list=new ArrayList<Node>();if(node.left!=null){list.addAll(midPrint(node.left));}list.add(node);if(node.right!=null){list.addAll(midPrint(node.right));}return list;}public void add(int data){if(root==null){root=new Node(data, null, null);}else{Node parent = null;Node current=root;    while(current!=null){    parent=current;    if(current.data>data){    current=current.left;    }else{    current=current.right;    }        }            if(parent.data>data){    Node node=new Node(data, null, null);    parent.left=node;    }else{    Node node=new Node(data, null, null);    parent.right=node;    }}}class Node{int data;Node left;Node right;public Node(int data,Node left,Node right){this.data=data;this.left=left;this.right=right;}public void print(){if(this.left!=null){this.left.print();}System.out.println(this.data);if(this.right!=null){this.right.print();}}@Overridepublic String toString() {// TODO Auto-generated method stubreturn ""+this.data;}}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubBinaryTree bt = new BinaryTree();          bt.add(5);          bt.add(7);          bt.add(3);          bt.add(2);          bt.add(1);          bt.add(6);          bt.add(4);          System.out.println("************************");          bt.preOrder(bt.root);          System.out.println("************************");        //        System.out.println(bt.breadFipreOrderrst());                List<Node> list=bt.breadFirst2();        for(Node node:list){        System.out.println(node.data);        }}}