JS 计算二叉树深度

712 阅读1分钟

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

例如:

给定二叉树 [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