zoukankan      html  css  js  c++  java
  • 二叉树的深度<java版>

    二叉树的结构

    二叉树是比较常见的一种的一种数据结构。

    首先看看二叉树的数据结构:

    //由左节点和右节点以及一个节点值构成   
    public class TreeNode{ TreeNode leftNode; TreeNode rightNode; int val; TreeNode(int val){ this.val=val; this.leftNode=null; this.rightNode=null; } }

    正是由于二叉树的这个结构,所以我们常用遍历解决二叉树的相关问题。

    二叉树的深度问题

    二叉树的深度问题主要分为两种,最大深度和最小深度。

    最大深度:即二叉树的高度

    递归思路:递归跳出条件是判断一个节点是否是空,如果为空则跳出,如果不为空则加一继续递归。最后的返回值只需返回左子树和右子树中的最大值。

    代码实现:

    public int deepthTree(TreeNode node){
            if (node==null){
                return 0;  //递归跳出条件
            }
          return Math.max(deepthTree(node.leftNode),deepthTree(node.rightNode))+1;
    }

    非递归思路:采用二叉树的层序遍历的思想(层序遍历为我们可以采用队列进行辅助操作)。我们需要遍历每层,每遍历完一层则将level进行加一的操作。这个问题的关键在于如何知道每层是否遍历完了,我们可以定义一个初始变量cur,然后将cur和每层的进入队列的节点的size进行比较,判断是否遍历完这个层的最后一个节点。

    代码实现:

      public int deepthTree(TreeNode node){
            //非递归实现
            LinkedList<TreeNode> queue=new LinkedList<>();  //设置队列
            queue.offer(node);  //将根节点入队列
            TreeNode bitTree=null;  
            int level=0;
            while (!queue.isEmpty()){
                int cur=0;  //当每层遍历完的时候,cur恢复初始值
                int length=queue.size();
                while (cur<length){
                    bitTree=queue.poll();
                    cur++;
                    if (bitTree.leftNode!=null) {
                        queue.offer(bitTree.leftNode);
                    }
                    if (bitTree.rightNode!=null) {
                        queue.offer(bitTree.rightNode);
                    }
                }
                level++;  //层数进行++
            }
            return level;
        }

    最小深度

    参考别人整理的思路:

    思路:

    1.没有根节点,那结果就是0 
    2.有根节点,没有左右子树,结果为1 
    3.没有左子树,有右子树。把右子树看成一棵新的树。 
    4.没有右子树,有左子树。把左子树看成一棵新的树。 
    5.既有左子树,又有右子树。那就把左右子树分别都看成新的树,最后比较谁的最近叶子的路径短,就取哪边。 
    ---------------------  
    原文:https://blog.csdn.net/sinat_35803474/article/details/70040544 
    

    代码实现:

     public int deepthTree(TreeNode node){
            //<--最小深度-->
            if (node==null){
                return 0;
            }
            if (node.leftNode==null && node.rightNode==null){
                return 1;
            }
            if (node.rightNode==null){
                return deepthTree(node.leftNode)+1;
            }else if (node.leftNode==null){
                return deepthTree(node.rightNode)+1;
            }else {
                return Math.min(deepthTree(node.leftNode),deepthTree(node.rightNode))+1;
            }
        }      
  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/LcMiho/p/10113516.html
Copyright © 2011-2022 走看看