思路一:层序遍历
import java.util.*;
public class Solution {
public int TreeDepth(TreeNode root) {
if(root==null)
return 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int level=0;
while(queue.size()>0)
{
int len=queue.size();
while(len>0)
{
TreeNode node = queue.poll();
if(node.left!=null)
queue.add(node.left);
if(node.right!=null)
queue.add(node.right);
len--;
}
level++;
}
return level;
}
}
时间O(N) 空间O(N)最坏情况平衡树,树的宽度n/2
思路二:分治法【参考归并排序】
求树深度等于求左右子树深度求其大,求子树深度等于求子树左右子树深度求其大..........
大问题可以拆解小问题,大问题小问题求解思路相同,存在终止条件
最后这个加一理解一下,当子树没有左右子树时返回的是0,深度为1
public class Solution {
int level=0;
public int TreeDepth(TreeNode root) {
if(root==null)
return 0;
int leftLen=TreeDepth(root.left);
int rightLen=TreeDepth(root.right);
return leftLen>rightLen?leftLen+1:rightLen+1;
}
}
时间O(N),空间 最坏二叉树退化链表O(N),平均单边递归栈即树的深度logn