题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路:
递归:左树右树的深度最大值+1
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def TreeDepth(self, pRoot):
# write code here
if not pRoot:
return 0
lefttree=self.TreeDepth(pRoot.left)
righttree=self.TreeDepth(pRoot.right)
return max(lefttree,righttree)+1
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
public int TreeDepth(TreeNode root) {
if(root==null) return 0;
return Math.max(TreeDepth(root.left),TreeDepth(root.right))+1;
}
}
非递归:
层次遍历
利用currentcount和nextcount来记录当前层的应遍历的节点个数,满足遍历完后,depth+=1
public class Solution {
public int TreeDepth(TreeNode root) {
if(root==null) return 0;
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root);
int depth=0;
int currentcount=0;//记录当前层的节点个数
int nextcount=1;//当前层应有的节点个数
while(!queue.isEmpty()){
TreeNode currentnode=queue.poll();
currentcount+=1;
if(currentnode.left!=null) queue.add(currentnode.left);
if(currentnode.right!=null) queue.add(currentnode.right);
if(currentcount==nextcount){//满足时,表示当前层遍历完,深度可以加1
currentcount=0;
nextcount=queue.size();
depth+=1;
}
}
return depth;
}
}