一棵任意树的高度

时间:2018-06-28 08:11:06

标签: javascript performance tree

给定一棵任意树,其中每个节点都有一个指向其第一个子节点(node.left)和最接近的同级节点(node.right)的指针,如何找到树的高度?

这就是我所拥有的:

function height(tree) {
  let h = 0;
  const queue = [[tree.root, 1]]; // pair (Node, depth)
  let n = 0; // use a pointer rather than shifting the array
  while (n < queue.length) {
    const [node, d] = queue[n];
    if (d > h) h = d; // if the current depth is greater then the max height so far, then update the max height
    // Traverse the siblings
    let r = node.right;
    while (r) {
      queue.push([r, d]); // siblings have the same depth
      r = r.right;
    }
    node.left && queue.push([node.left, d + 1]); // traverse the children
    n++; // go to the next Node
  }
  return h;
}

它不是递归的,因为树可能真的很大,并且我收到溢出错误。 这段代码应该可以,但是只是想知道是否有其他/更好的方法。

1 个答案:

答案 0 :(得分:0)

function height(node){
   if(!node) return 0;
   var leftHeight = height(node.left);
   var rightHeight = height(node.right);

   return Math.max(leftHeight, rightHeight) + 1;
}

最好的方法是使用递归。它很干净而且可读。