我的二进制树的CountHeight函数有什么问题(Javascript)

时间:2018-02-11 17:48:36

标签: javascript algorithm tree

var CountHeight = function(root){
    if(root == null){
       console.log("NULL!")
       return 0;
    }

    leftheight = CountHeight(root.left);
    rightheight = CountHeight(root.right);
    if (leftheight > rightheight){
        return leftheight + 1;
    } else if(rightheight > leftheight){
        return rightheight + 1;
    } else if(rightheight == leftheight){
        return leftheight + 1;
    }

}

每个根都有一个左右值,指向另一个树。

我尝试通过插入一个树来测试这个函数(我知道该函数采用一个名为root的参数,但我基本上将树传递给它)。我传递的树看起来像这样:

(root)10: (leftofroot)left: 4 - left: null right: 8
(rightofroot)right: 15 - left: null right: null

如果你不能按照上面的图表,我基本上在我的树上添加以下节点:10,4,15,8

好的,所以当我将树传递给函数时,我得到了值2,但显然我的树的高度为3.节点8是唯一具有深度为3的节点。

那么有人能告诉我我的功能出了什么问题吗?

PS:我正在挣扎,如果我的问题太混乱了,有人可以给我另一个功能,当我把一棵树放进树里时找到树的高度。

谢谢!

var testBST = new BST();
testBST.addNode(10);
testBST.addNode(4);
testBST.addNode(15);
testBST.addNode(8);

console.log(testBST);
console.log(CountHeight(testBST));

1 个答案:

答案 0 :(得分:0)

您可以使用Math.max来缩小后续条件,以获得左侧和右侧的最大深度。

function countHeight(root) {
    return root
        ? 1 + Math.max(countHeight(root.left), countHeight(root.right))
        : 0;
}