是否有一些算法可以到达二叉树的孙子?像例子一样?
在图片中,有一些节点将祖父母与孙子孙女联系起来,而普通的二元树只将孩子与父母联系起来。用什么算法来链接祖父母?
编辑: 每个节点都有一个索引和两个值。 [指数] [价值];
我想做什么:
index[3] and index[4] = value[0];
index[5] and index[6] = value[1];
index[7] and index[8] = value[2];
index[9] and index[10] = value[3];
.... ETC
答案 0 :(得分:6)
通常,您使用两个指针在二叉树中构造每个节点:左子指针' node.left'和一个右子指针节点&node; right'。然后,节点的四个孙子可以找到表达式'node.left.left',' node.left.right',' node.right.left&#39 ;和' node.right.right'。这些表达式将很快评估。
通过这种技术访问孙子会让那些必须维护你的代码的人变得更加简单,甚至在你有时间忘记你曾经讨论过这个问题之后的10个月甚至是你。
如果你坚持冗余地存储孙指针,那么每个节点需要四个额外的指针:< node.leftleft',node.leftright','节点。 rightleft'和' node.rightright'。
这就像定义一个坏主意。树不仅大而且笨拙,而且每次添加或删除节点时,您都会发现自己更新了指针的指针。为了弥补你花在调试这么乱的时间,你将不得不使用该程序大约九千年。
答案 1 :(得分:1)
0
/ \
1 2
/ \ / \
3 4 5 6
[0,1,2,3,4,5,6]二进制树作为数组
左= 2n + 1
对= 2n + 2
left-left-grandChild = 2(2n + 1)+1 => 4N + 3
left-right-grandChild = 2(2n + 1)+2 => 4N + 4
right-left-grandChild = 2(2n + 2)+1 => 4N + 5
右 - 右 - grandChild = 2(2n + 2)+2 => 4N + 6