我正在尝试使用GraphViz重新创建二叉搜索树的示例图.这是它最终应该看起来的样子:
这是我的第一次尝试:
digraph G {
nodesep=0.3;
ranksep=0.2;
margin=0.1;
node [shape=circle];
edge [arrowsize=0.8];
6 -> 4;
6 -> 11;
4 -> 2;
4 -> 5;
2 -> 1;
2 -> 3;
11 -> 8;
11 -> 14;
8 -> 7;
8 -> 10;
10 -> 9;
14 -> 13;
14 -> 16;
13 -> 12;
16 -> 15;
16 -> 17;
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是GraphViz并不关心树的水平位置,所以我得到:
如何添加约束以使顶点的水平位置反映其总排序?
假设每个节点都有self.left
,self.right
和self.data
,从每个级别给出数字的列表中构造二叉树而不是二叉搜索树(BST)的最佳方法是什么。其中第一个数字是级别 1,接下来的 2 是级别 2,接下来的 4 是级别 3,依此类推。例如
input: [3,5,2,1,4,6,7,8,9,10,11,12,13,14]
Run Code Online (Sandbox Code Playgroud)
构造一棵树:
3
/ \
5 2
/\ /\
1 4 6 7
/\ /\ /\ /\
8 9 10 11 12 13 14
Run Code Online (Sandbox Code Playgroud)
一种解决方案是:
for node at index i,
left child index = 2i+1
right child index = 2i+2
Run Code Online (Sandbox Code Playgroud)
想知道是否还有其他可能的方法