二叉树

本文介绍了求解二叉树最大深度的两种方法:递归和非递归(层序遍历)。递归方法通过比较左右子树深度来确定整体深度;非递归方法则利用队列实现层序遍历,每遍历完一层更新深度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题链接: http://oj.leetcode.com/problems/maximum-depth-of-binary-tree/  

这是一道比较简单的树的题目,可以有递归和非递归的解法,递归思路简单,返回左子树或者右子树中大的深度加1,作为自己的深度即可,代码如下: 

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public int maxDepth(TreeNode root) {  
  2.     if(root == null)  
  3.         return 0;  
  4.     return Math.max(maxDepth(root.left),maxDepth(root.right))+1;  
  5. }  
非递归解法一般采用层序遍历(相当于图的BFS),因为如果使用其他遍历方式也需要同样的复杂度O(n). 层序遍历理解上直观一些,维护到最后的level便是树的深度。代码如下: 
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public int maxDepth(TreeNode root) {  
  2.     if(root == null)  
  3.         return 0;  
  4.     int level = 0;  
  5.     LinkedList<TreeNode> queue = new LinkedList<TreeNode>();  
  6.     queue.add(root);  
  7.     int curNum = 1//num of nodes left in current level  
  8.     int nextNum = 0//num of nodes in next level  
  9.     while(!queue.isEmpty())  
  10.     {  
  11.         TreeNode n = queue.poll();  
  12.         curNum--;  
  13.         if(n.left!=null)  
  14.         {  
  15.             queue.add(n.left);  
  16.             nextNum++;  
  17.         }  
  18.         if(n.right!=null)  
  19.         {  
  20.             queue.add(n.right);  
  21.             nextNum++;  
  22.         }  
  23.         if(curNum == 0)  
  24.         {  
  25.             curNum = nextNum;  
  26.             nextNum = 0;  
  27.             level++;  
  28.         }  
  29.     }  
  30.     return level;  
  31. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值