求助 二叉树类排列位置的算法问题

图片说明
这种形式的位置排列怎么计算每一个落点的xy位置

我的页面总宽度为2000px 高度为2000px 父节点下的每个子节点的位置都是均匀分布的

高度每次都一样为100不变8的位置就是 1000 100
3就是500 200 10就是1500 200
如果3下面有3个节点就分别是(250,300)(500,300)(750,300)

这个和二叉树没有任何关系 只是按照他这种节点分布计算每个的xy 不是计算往哪放 比如4下面再添加4个节点 他们的坐标分别又是多少 是这个算法 每次都可以知道父节点位置

这是一个二叉搜索树,给出定值n,设当前节点坐标为(x,y)初始时x=1000,y=100

判断

     如果等于当前节点值则 返回x,y
     如果小于当前节点值则使x=x/2,y=y+100; 同时进入左节点
     如果大于当前节点值则使x=x+x/2,y=y+100; 同时进入由节点。

考虑到你需要的“均匀分布”,确定了根节点坐标xy为1000,1000,向下派生节点的时候,每个节点的位置跟它的个数有关。
这里不讨论y了,y跟随深度线性增加。
如果是奇数个N,则子节点的x列表为[.....,1000-t,1000,1000+t,....] 步长为 t ,这里不能确定 t 的值,
需要根据最终树的深度来确定较为合适的t值使得整个树看起来“撑满”了宽度。
但是由于总高度的限制,所以可以根据最大深度 20 给出合理的 t值。

这里定义ti : 深度为i 的横向间隔。
楼主的问题应该就是如何确定每一个ti使得整个树看起来“平衡”吧?

对于这个问题,如果深度固定是20可以自下而上去构建这个树,其实不是树的构建,而是自下而上计算出节点的坐标。
首先从根节点出发,按层序遍历所有节点,记录节点信息Node (x,y, 子节点数n,深度i) ,产生了列表 List(Node) list
再根据 i值 的逆序遍历list,根据最大宽度和一层的节点数(i相同的Node数求和) 去平分确定每个Node的x值,y值由i计算出 。
至此我觉得实现不是难事吧,主要是描述清楚问题和算法。