输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
解析:
计算二叉树的通用解决方案: 递归。
计算深度的递归:递归函数的实现的入参为 root 节点, 内容为计算 root 的 左高度和 右高度,若存在则 + 1
递归结束的条件为 root 节点为 null,返回 root左节点计算高度 和 右节点计算高度的最大值,即可得到该节点深度
构建二叉树数据结构:
function TreeCode() {
let NodeTree = function (ele) {
this.val = ele;
this.left = null;
this.right = null;
}
this.createTree = function () {
let tree = new NodeTree('4');
tree.left = new NodeTree('2');
tree.right = new NodeTree('7');
tree.left.left = new NodeTree('D');
tree.left.left.left = new NodeTree('G');
tree.left.left.right = new NodeTree('H');
tree.right.left = new NodeTree('E');
tree.right.right = new NodeTree('F');
tree.right.left.right = new NodeTree('I');
return tree;
}
}
// 创建二叉树数据结构,并且生成一个二叉树
let treeCode = new TreeCode();
let root = treeCode.createTree()
递归,计算入参节点的深度:
var getNodeHeight = function (root) {
if (root === null) return 0
return Math.max(getNodeHeight(root.left), getNodeHeight(root.right)) + 1
}
计算 二叉树深度
var maxDepth = function (root) {
return getNodeHeight(root)
};
console.log(maxDepth(root))
完整代码:
function TreeCode() {
let NodeTree = function (ele) {
this.val = ele;
this.left = null;
this.right = null;
}
this.createTree = function () {
let tree = new NodeTree('4');
tree.left = new NodeTree('2');
tree.right = new NodeTree('7');
tree.left.left = new NodeTree('D');
tree.left.left.left = new NodeTree('G');
tree.left.left.right = new NodeTree('H');
tree.right.left = new NodeTree('E');
tree.right.right = new NodeTree('F');
tree.right.left.right = new NodeTree('I');
return tree;
}
}
// 创建二叉树数据结构,并且生成一个二叉树
let treeCode = new TreeCode();
let root = treeCode.createTree()
var getNodeHeight = function (root) {
if (root === null) return 0
return Math.max(getNodeHeight(root.left), getNodeHeight(root.right)) + 1
}
var maxDepth = function (root) {
return getNodeHeight(root)
};
console.log(maxDepth(root))
输出结果:
4