java 二叉树的深度_二叉树的深度<java版>

二叉树的结构

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

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

//由左节点和右节点以及一个节点值构成

public classTreeNode{

TreeNode leftNode;

TreeNode rightNode;intval;

TreeNode(intval){this.val=val;this.leftNode=null;this.rightNode=null;

}

}

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

二叉树的深度问题

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

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

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

代码实现:

public intdeepthTree(TreeNode node){if (node==null){return 0; //递归跳出条件

}return Math.max(deepthTree(node.leftNode),deepthTree(node.rightNode))+1;

}

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

代码实现:

public intdeepthTree(TreeNode node){//非递归实现

LinkedList 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

bitTree=queue.poll();

cur++;if (bitTree.leftNode!=null) {

queue.offer(bitTree.leftNode);

}if (bitTree.rightNode!=null) {

queue.offer(bitTree.rightNode);

}

}

level++; //层数进行++

}returnlevel;

}

最小深度

参考别人整理的思路:

思路:

1.没有根节点,那结果就是0

2.有根节点,没有左右子树,结果为1

3.没有左子树,有右子树。把右子树看成一棵新的树。

4.没有右子树,有左子树。把左子树看成一棵新的树。

5.既有左子树,又有右子树。那就把左右子树分别都看成新的树,最后比较谁的最近叶子的路径短,就取哪边。

---------------------

原文:https://blog.csdn.net/sinat_35803474/article/details/70040544

代码实现:

public intdeepthTree(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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值