二叉树垂直顺序遍历,我的代码有什么问题

时间:2016-06-08 19:51:04

标签: javascript algorithm binary-tree traversal tree-traversal

给定二叉树,返回其节点的垂直顺序遍历'值。 (即,从上到下,逐列)。

如果两个节点在同一行和列中,则顺序应为从左到右。

enter image description here

enter image description here

我的解决方案对于记录每个垂直级别中的节点列表是正确的,但是,似乎需要以从上到下的顺序返回相同垂直级别的节点的顺序。根据下面的具体测试用例,2是8的后代,所以它应该出现在8之后,但为什么我的代码以相反的顺序返回?

enter image description here

**请注意,因为为简单起见,输入示例显示为数组,但它实际上是一个树节点对象。请在下面的代码中查看评论。 我的代码:

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var verticalOrder = function(root) {
    var store =  {};
    traverse(root, 0, store);
    var columnKey = Object.keys(store).sort(function(a,b){return a - b});
    var results = [];
    for(var i = 0; i < columnKey.length; i++){
        results.push(store[columnKey[i]]);
    }
    return results
};

var traverse = (node, count, columns) => {
    if(!node) return;
    if(columns[count]) columns[count].push(node.val);
    else columns[count] = [node.val];
    if(node.left) traverse( node.left, count-1 ,columns)
    if(node.right) traverse(node.right, count+1,  columns)

}

0 个答案:

没有答案