二叉树

  1、二叉树三个节点构成,分别是根、左、右。

    如果需要进行二叉树遍历,则数据必须先排序(冒泡排序/快速排序/选择排序

    原则:左子树一定小于等于根,右子树一定大于根

    遍历方式:

      1、先序遍历:根左右

      2、中序遍历:左根右

      3、右序遍历/后序遍历:左右根

 

节点代码:

package cn.xiang.tree.binaryTree;

public class NodeTreeDemo {
    int data;
    NodeTreeDemo left;
    NodeTreeDemo right;

    public NodeTreeDemo(){
    }
    
    public NodeTreeDemo(int data){
        this.data = data;
        left = null;
        right = null;
    }
    
    public void insert(NodeTreeDemo root,int data){
        /*if(root.data>data){
            if(root.left==null){
                root.left = new NodeTreeDemo(data);
            }else{
                this.insert(root.left, data);
            }
        }else{
            if(root.right==null){
                root.right = new NodeTreeDemo(data);
            }else{
                this.insert(root.right, data);
            }
        }*/
        if(data>root.data){ //如果插入的节点大于跟节点  
            if(root.right==null){          //如果右子树为空,就插入,如果不为空就再创建一个节点                                                           
            root.right=new NodeTreeDemo(data); //就把插入的节点放在右边  
            }else{  
                this.insert(root.right, data);  
            }  
        }else{  //如果插入的节点小于根节点  
            if(root.left==null){ //如果左子树为空,就插入,如果不为空就再创建一个节点             
                root.left=new NodeTreeDemo(data); //就把插入的节点放在左边边  
            }else{  
                this.insert(root.left, data);  
            }  
        }  
        
    }

    @Override
    public String toString() {
        return "NodeTree [data=" + data + ", left=" + left + ", right=" + right + "]";
    } 
    
    
}

 

查询执行代码

package cn.xiang.tree.binaryTree;

public class NodeQueryDemo {
    public static void main(String[] args) {
        int[] array = {35,66,39,33,28,65,56,87};  
        NodeTreeDemo root = new NodeTreeDemo(array[0]);
        for (int i = 1; i < array.length; i++) {
            root.insert(root, array[i]);
        }
        System.out.println(root);
        System.out.println("先序遍历");
        preOrder(root);
        System.out.println("\n 先序遍历");
        inOrder(root);
        System.out.println("\n 后序遍历");
        postOrder(root);
    }
    
    //先序遍历
    public static void preOrder(NodeTreeDemo root){
        if(root!=null){
            System.out.print(root.data+"-");
            preOrder(root.left);
            preOrder(root.right);
        }
    }
    
    //中序遍历
        public static void inOrder(NodeTreeDemo root){
            if(root!=null){
                inOrder(root.left);
                System.out.print(root.data+"-");
                inOrder(root.right);
            }
        }
        
        //后序遍历
        public static void postOrder(NodeTreeDemo root){
            if(root!=null){
                postOrder(root.left);
                postOrder(root.right);
                System.out.print(root.data+"-");
            }
        }        
}

 

 

 先序遍历:

    public static void preOrder(NodeTreeDemo root){
        if(root!=null){
            System.out.print(root.data+"-");
            preOrder(root.left);
            preOrder(root.right);
        }
    }

 

 

//中序遍历
        public static void inOrder(NodeTreeDemo root){
            if(root!=null){
                inOrder(root.left);
                System.out.print(root.data+"-");
                inOrder(root.right);
            }
        }

  

 

 

//后序遍历
        public static void postOrder(NodeTreeDemo root){
            if(root!=null){
                postOrder(root.left);
                postOrder(root.right);
                System.out.print(root.data+"-");
            }
        }    

 

posted @ 2018-03-21 09:42  项羽齐  阅读(156)  评论(0编辑  收藏  举报