二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
题解
1、递归深度遍历
根节点若为空节点高度为0,非空遍历左节点和有节点,查看左右节点的高度,取最大值+1 则为该节点深度
class Solution {
public int maxDepth(TreeNode root) {
if (root == null){
return 0;
}
return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
}
}
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
if(root === null){
return 0;
}
return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
};
2、层序遍历
1、若根为空返回高度为0
2、若不为空,将根节点存储在数组中,
3、若根数组不为空,
4、遍历左节点和右节点,将左右节点放在另一个数组中,
5、将每层左右节点数组赋值给根节点数组,层数加1,做为下一次检验的根数组
6、重复3之后操作,直至根数组为空,输出层数。
class Solution {
public int maxDepth(TreeNode root) {
if (root == null){ return 0;}
int res = 0;
List<TreeNode> tree = new LinkedList<>();
tree.add(root);
while(!tree.isEmpty()){
List<TreeNode> temp = new LinkedList<>();
for(TreeNode node : tree){
if(node.left != null){
temp.add(node.left);
}
if(node.right != null){
temp.add(node.right);
}
}
tree = temp;
res++;
}
return res;
}
}
var maxDepth = function(root) {
if(root === null){
return 0;
}
let tree = [root];
let res = 0;
while (tree.length){
let temp = [];
for(let i = 0;i<tree.length;i++){
if(tree[i].left) temp.push(tree[i].left);
if(tree[i].right) temp.push(tree[i].right);
}
tree = temp;
res++;
}
return res;
};