预序遍历:
后序遍历:
中序遍历:
我有一个二叉树,每个节点都有预序遍历号、后序遍历号和中序遍历号(从0到11)。如何使用每个节点的中序遍历号、预序遍历号和后序遍历号,在常数时间内获得给定节点u为根的子树的大小?
编辑:
例如,要确定w是否在u的子树中,您需要u的前序号、u的后序号、w的前序号和w的后序号。
因为如果w的前序号大于u的前序号,并且w的后序号小于u的后序号,则我们可以得出结论:w在u的子树中。
预序遍历:
后序遍历:
中序遍历:
我有一个二叉树,每个节点都有预序遍历号、后序遍历号和中序遍历号(从0到11)。如何使用每个节点的中序遍历号、预序遍历号和后序遍历号,在常数时间内获得给定节点u为根的子树的大小?
编辑:
例如,要确定w是否在u的子树中,您需要u的前序号、u的后序号、w的前序号和w的后序号。
因为如果w的前序号大于u的前序号,并且w的后序号小于u的后序号,则我们可以得出结论:w在u的子树中。
pre_order(u.right)- pre_order(u.left)
`计算左子树中节点数,因为从左子树开头到右子树开头的“距离”就是左子树的大小。post_order(u.right)- post_order(u.left)
`计算右子树中节点数,因为左子树结尾和右子树结尾之间的差异就是右子树的大小。pre_order(x)
或post_order(x)
或in_order(x)
的值,其中x
是我们不知道名称但其在树中的位置对观众来说是明显的节点。post_order(u)== 8
`,`post_order(u.left)
`未定义,`pre_order(u.left)
`和`in_order(u.right)
`等也是如此,因为它没有子节点。u
,使得pre_order(u)== post_order(u)== in_order(u)== 3
,然后post_order(u.left)== 1
,pre_order(u.right)== 5
。