二叉树中每个节点的坐标
Coordinates of every node in a binary tree?
我有以下函数来计算二叉树中每个节点的坐标。
//x & y parameters should be untouched
//root assumed to be 0,0
function nodeCoordinates(node, x, y)
{
if (x === undefined && y === undefined ) {x = 0; y = 0;}
if (!node) {return;}
console.log("Node: " + node.value + " x: " + x + " y: " + y);
nodeCoordinates(node.left, --x, --y);
nodeCoordinates(node.right, x+=2, y--);
}
节点与树(BST):
//Nodes for BST
function Node(val) {
this.value = val;
this.left = null;
this.right = null;
}
//Binary Search Tree
function BST() {
this.root = null;
}
对于x,如果它向左,它应该递减。右转则递增
对于y,它应该在下降一级时减少。
示例测试代码和输出:
my_BST.insert(50);
my_BST.insert(60);
my_BST.insert(55);
my_BST.insert(20);
my_BST.insert(70);
my_BST.insert(80);
my_BST.insert(10);
my_BST.insert(30);
my_BST.insert(65);
nodeCoordinates(my_BST.root);
- 节点:50 x: 0 y: 0
- 节点:20 x: -1 y: -1
- 节点:10 x: -2 y: -2
- 节点:30 x: 0 y: -2
- 节点:60 x: 1 y: -1
- 节点:55 x: 0 y: -2
- 节点:70 x: 2 y: -2
- 节点:65 x: 1 y: -3
- 节点:80 x: 3 y: -3
输出是正确的,但这是通过递归传递参数的方式摆弄的结果,感觉不直观。有人能帮我解释一下发生了什么事吗?有没有更直观的方法来解决这个问题?
我将改变参数处理,而不使用赋值或自增操作符。
function nodeCoordinates(node, x, y) {
x = x || 0;
y = y || 0;
if (!node) {
return;
}
console.log("Node: " + node.value + " x: " + x + " y: " + y);
nodeCoordinates(node.left, x - 1, y - 1);
nodeCoordinates(node.right, x + 1, y - 1);
}
基本上y
是树的水平,与低于零。
x
具有误导性,因为节点可以具有相同的"坐标",如
Node: 30 x: 0 y: -2 Node: 55 x: 0 y: -2
相关文章:
- 节点导出返回一个空对象
- 可以前端maven插件使用节点,npm已经安装
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- 在jstree中,如何将指定的节点集中到大型树上
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 如何在d3.js中返回路径的y坐标
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- 在谷歌地图上获取事件的x,y坐标
- 如何处理node.js节点mongodb中的连接和查询队列
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- 将DOM节点值与字符串Javascript进行比较
- 节点fs.stat名称未定义
- 无法安装节点sass相关性
- 节点协同与生成器和Promise并行流量控制
- 二叉树中每个节点的坐标
- 如何找到如果一个坐标是在一个多边形在猫鼬节点js
- D3力有向图问题:节点堆叠在坐标(0,0)