我的页面总宽度为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计算出 。
至此我觉得实现不是难事吧,主要是描述清楚问题和算法。