• Java 二叉树一些基本操作


    求二叉树中节点个数:

        /*1. 求二叉树中的节点个数
            递归解法:
            (1)如果二叉树为空,节点个数为0
            (2)如果二叉树不为空,二叉树节点个数 = 左子树节点个数 + 右子树节点个数 + 1
        */
        public int GetNodeNum(TreeNode root){
            if(root == null)
                return 0;
            return GetNodeNum(root.getLeft()) + GetNodeNum(root.getRight()) + 1;
        }

    求二叉树的深度:

        /*2. 求二叉树的深度
            递归解法:
            (1)如果二叉树为空,二叉树的深度为0
            (2)如果二叉树不为空,二叉树的深度 = max(左子树深度, 右子树深度) + 1
        */
        public int GetDepth(TreeNode root){
            if(root == null)
                return 0;
            int left = GetDepth(root.getLeft());
            int right = GetDepth(root.getRight());
            return Math.max(left, right) + 1;
        }
        

    二叉树广度遍历:

    public void LevelTraverse(TreeNode root){
            //AbstractQueue queue = new AbstractQueue();
            Queue queue = new Queue();
            if(root == null)
                return;
            queue.Enqueue(root);
            while(queue.size != 0){
                TreeNode Node = queue.Dequeue();
                System.out.println(Node.getValue());
                if(Node.getLeft() != null){
                    queue.Enqueue(Node.getLeft());
                }
                if(Node.getRight() != null){
                    queue.Enqueue(Node.getRight());
                }    
            }
        }

    判断一个二叉树是不是满二叉树:

    /*
         * 判断一个二叉树是不是满二叉树
         */
        public boolean IsFullTree(TreeNode root){
            boolean flag = false;
            Queue queue = new Queue();
            if(root == null)
                return true;
            queue.Enqueue(root);
            while(queue.size != 0){
                TreeNode node = queue.Dequeue();
                if(flag == true){//flag = true表示已有节点左右子树为null
                    if(node.getLeft() != null ||node.getRight() != null){
                        return false;
                    }
                    break;
                }
                else{
                    //节点左右子树不为空,则左右节点入队
                    if(node.getLeft() != null && node.getRight()!=null){
                        queue.Enqueue(node.getLeft());
                        queue.Enqueue(node.getRight());
                    }
                    //节点右子树为空,左节点入队
                    else if(node.getLeft() != null && node.getRight() == null){
                        flag = true;
                        queue.Enqueue(node.getLeft());
                    }//左节点为空,右子树不为空,直接返回FALSE
                    else if(node.getLeft() == null && node.getRight() != null){
                        return false;
                        
                    }
                    else
                    {//左右都为空,则为叶子节点
                        flag = true;
                    }
                }
            }
            return true;
        }

    判断二叉树B是不是A的子结构:

    /*
         * 判断树root2是不是树root1的子结构
         */
        public boolean SubTree(TreeNode root1,TreeNode root2){
            boolean result = false;
            if(root1 != null && root2 != null){
                if(root1.getValue() == root2.getValue()){
                    result = Dostree(root1,root2);
                }
                if(!result){
                    result = SubTree(root1.getLeft(),root2);
                }
                if(!result){
                    result = SubTree(root1.getRight(),root2);
                }
            }
            return result;
        }
        public boolean Dostree(TreeNode root1,TreeNode root2){
            if(root1 == null)
                return false;
            if(root2 == null)
                return false;
            if(root1.getValue() != root2.getValue())
                return false;
            return Dostree(root1.getLeft(),root2.getLeft()) && Dostree(root1.getRight(),root2.getRight());
        }
  • 相关阅读:
    java-Math类
    java-Random类
    java-SimpleDateFormat类
    java-Calendar类+
    java-Calendar类
    java-System类
    java-Integer的面试题
    Android中怎么用this
    adapter(转自Devin Zhang)
    实例变量和局部变量
  • 原文地址:https://www.cnblogs.com/hfczgo/p/4056068.html
Copyright © 2020-2023  润新知