美文网首页
2018-08-04

2018-08-04

作者: Ping接未来 | 来源:发表于2018-08-04 09:58 被阅读0次

    排序二叉树的遍历

    所谓排序二叉树是指树中的每个节点大于其左子节点,小于其左子节点。
    排序二叉树的遍历大体上可以分为三种,分别是前序遍历、中序遍历和后续遍历

    • 前序遍历:先父节点,然后再左右子节点
    • 中序遍历:先左子节点,然后父节点,最后右子节点
    • 后续遍历:先左右子节点,然后再父节点
      实现三种遍历的核心思想是采用递归。

    代码实现:

    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Stack;
    public class BinarySearchTree<AnyType extends Comparable<? super AnyType>> {
        
        private static class BinaryNode<AnyType>{
            AnyType element;
            BinaryNode<AnyType> left;
            BinaryNode<AnyType> right;
            BinaryNode(AnyType theElement){
                this(theElement,null,null);
            }
            BinaryNode(AnyType theElement, BinaryNode<AnyType>lt, BinaryNode<AnyType> rt){
                element = theElement;
                left =lt;
                right =rt;
            }
            
        }
        private BinaryNode<AnyType> root;
        public void insert(AnyType x){
            root = insert(x,root);
        }
        public boolean isEmpty(){
            return root==null;
        }
        public BinaryNode<AnyType> insert(AnyType x, BinaryNode<AnyType> t){
            if(t==null){
                return new BinaryNode<>(x,null,null);
            }
            int compareResult =x.compareTo(t.element);
            if(compareResult<0){
                t.left = insert(x,t.left);
            }
            else if (compareResult>0){
                t.right = insert(x,t.right);
            }
            else{
                ;
            }
            return t;
        }
         /*前序遍历*/
        public void preOrder(BinaryNode<AnyType>Node){
            if(Node!=null){
                System.out.print(Node.element+" ");
                preOrder(Node.left);
                preOrder(Node.right);
            }
        }
        /*中序遍历*/
        public void midOrder(BinaryNode<AnyType>Node){
            if(Node!=null){
                midOrder(Node.left);
                System.out.print(Node.element +" ");
                midOrder(Node.right);
            }
        }
        /*后续遍历*/
        public void postOrder(BinaryNode<AnyType>Node){
            if(Node!=null){
                postOrder(Node.left);
                postOrder(Node.right);
                System.out.print(Node.element+" ");
            }
        }
           /*按层遍历*/
         public void levelOrder(BinaryNode<AnyType> Node) {
                if (Node == null) {
                    return;
                }
    
                int depth = depth(Node);
    
                for (int i = 1; i <= depth; i++) {
                    levelOrder(Node, i);
                }
            }
        
         private void levelOrder(BinaryNode<AnyType> Node, int level) {
                if (Node == null || level < 1) {
                    return;
                }
                if (level == 1) {
                    System.out.print(Node.element + "  ");
                    return;
                }
                levelOrder(Node.left, level - 1);
                levelOrder(Node.right, level - 1);
          }
        public int depth(BinaryNode<AnyType> Node){
            if(Node==null){
                return 0;
            }
            int l = depth(Node.left);
            int r = depth(Node.right);
            if(l>r){
                return l+1;
            }else{
                return r+1;
            }
        }
        public static void main( String[] args )
        {
            int[] input = {4, 2, 6, 1, 3, 5, 7, 8, 10};
            BinarySearchTree<Integer> tree = new BinarySearchTree<>();
            for(int i = 0; i < input.length; i++)
            {
                tree.insert(input[i]);
            }
            System.out.print("递归前序遍历 :");
            tree.preOrder(tree.root);
            System.out.print("\n递归中序遍历 :");
            tree.midOrder(tree.root);
       
            System.out.print("\n递归后序遍历 :");
            tree.postOrder(tree.root);
         
            System.out.print("\n递归层序遍历:");
            tree.levelOrder(tree.root);
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:2018-08-04

          本文链接:https://www.haomeiwen.com/subject/qripvftx.html