二叉树

来源:互联网 发布:边境牧羊犬多聪明 知乎 编辑:程序博客网 时间:2024/06/05 17:17
原题链接: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. }  
0 0
原创粉丝点击