给定二叉树,返回其节点的垂直顺序遍历'值。 (即,从上到下,逐列)。
如果两个节点在同一行和列中,则顺序应为从左到右。
我的解决方案对于记录每个垂直级别中的节点列表是正确的,但是,似乎需要以从上到下的顺序返回相同垂直级别的节点的顺序。根据下面的具体测试用例,2是8的后代,所以它应该出现在8之后,但为什么我的代码以相反的顺序返回?
**请注意,因为为简单起见,输入示例显示为数组,但它实际上是一个树节点对象。请在下面的代码中查看评论。 我的代码:
/**
* 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)
}