vlambda博客
学习文章列表

【植树节】程序员们一起来种“二叉树”啦

天 眼 创 智

让每一个人品质就业不再难

【植树节】程序员们一起来种“二叉树”啦


【植树节】程序员们一起来种“二叉树”啦



3月12日 又是一年植树节

科技改变视界版图

代码创造绿色动力


勤勤恳恳的“码农”们

也开始响应绿色环保的号召

一起来种“二叉树”啦



Binary tree/  二叉树

【植树节】程序员们一起来种“二叉树”啦

数组、栈、队列、链表都是线性结构,则是另外一种极其重要的数据结构。


树的种类有很多种,我们先从二叉树入手,总结求职面试必考二叉树高频试题



· 二叉树的基本数据结构:

class TreeNode{
     int val;
     //左孩子
     TreeNode left;
     //右孩子
     TreeNode right;

}


· 二叉树的最大深度:

int maxDeath(TreeNode node){
     if(node==null){
           return 0;
    }
    int left = maxDeath(node.left);
    int right = maxDeath(node.right);
    return Math.max(left,right) + 1;
}


· 二叉树的最小深度:

int getMinDepth(TreeNode root){
        if(root == null){
            return 0;
        }
        return getMin(root);
    }
    int getMin(TreeNode root){
        if(root == null){
            return Integer.MAX_VALUE;
        }
        if(root.left == null&&root.right == null){
            return 1;
        }
        return Math.min(getMin(root.left),getMin(root.right)) + 1;
    }


· 二叉树中的节点个数:

int maxDeath(TreeNode node){
     if(node==null){
           return 0;
    }
    int left = maxDeath(node.left);
    int right = maxDeath(node.right);
    return Math.max(left,right) + 1;
}


· 二叉树是否为平衡二叉树:

boolean isBalanced(TreeNode node){
        return maxDeath2(node)!=-1;
    }
    int maxDeath2(TreeNode node){
        if(node == null){
            return 0;
        }
        int left = maxDeath2(node.left);
        int right = maxDeath2(node.right);
    if(left==-1||right==-1||Math.abs(left-right)>1) {

            return -1;
        }
        return Math.max(leftright) + 1;
    }


· 判断二叉树是否是完全二叉树:

boolean isCompleteTreeNode(TreeNode root){
        if(root == null){
            return false;
        }
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.add(root);
        boolean result = true;
        boolean hasNoChild = false;
        while(!queue.isEmpty()){
            TreeNode current = queue.remove();
            if(hasNoChild){
               if(current.left!=null||current.right!=null){
                    result = false;
                    break;
               }
            }else{
                if(current.left!=null&&current.right!=null){
                    queue.add(current.left);
                    queue.add(current.right);
                }else if(current.left!=null&&current.right==null){
                    queue.add(current.left);
                    hasNoChild = true;
                }else if(current.left==null&&current.right!=null){
                    result = false;
                    break;
                }else{
                    hasNoChild = true;
                }
            }
        }
        return result;
    }


· 两个二叉树是否完全相同:


boolean isSameTreeNode(TreeNode t1,TreeNode t2)        {
        if(t1==null&&t2==null){
            return true;
        }
        else if(t1==null||t2==null){
            return false;
        }
        if(t1.val != t2.val){
            return false;
        }
        boolean left = isSameTreeNode(t1.left,t2.left);
        boolean right = isSameTreeNode(t1.right,t2.rig ht);
        return left&&right;
    }



· 两个二叉树是否互为镜像:

boolean isMirror(TreeNode t1,TreeNode t2){
    if(t1==null&&t2==null){
         return true;
    }
    if(t1==null||t2==null){
         return false;
    }
    if(t1.val != t2.val){
         return false;
    }
        return isMirror(t1.left,t2.right)&&isMirror(t1.right,t2.left);
    }


【植树节】程序员们一起来种“二叉树”啦


【植树节】程序员们一起来种“二叉树”啦



二叉树的建立及相关算法的实现

在面试环节中仍是重点

但对于各位程序员们来说

一定是“小菜一碟”吧


言归正传

绿水青山就是金山银山

共同努力 绿色植树 未来可期



/部分图文源于网络

扫码关注 天眼甲骨文

高品质IT人才孵化基地

JAVA 大数据  WEB前端      人工智能    UI设计