如何检查两个完整的二叉树是否相互镜像,只给出了树的水平顺序遍历?
完整二叉树是一个二叉树,除叶子节点外的所有节点都有2个子节点。
答案 0 :(得分:4)
我不认为这是可能的。考虑这两棵树:
0 0
/ \ / \
1 2 1 2
/ \ / \ / \
3 4 3 4 5 6
/ \
5 6
这些是完整的二叉树(根据您的定义),即使它们是不同的树,它们也具有相同的级别顺序遍历:0123456。
现在,看看他们的镜子:
0 0
/ \ / \
2 1 2 1
/ \ / \ / \
4 3 6 5 4 3
/ \
6 5
请注意,左侧树具有级别顺序遍历0214365,而右侧树具有级别顺序遍历0216543.换句话说,原始树具有相同级别顺序遍历,但它们的镜像具有不同的遍历。
现在,考虑如果你有你的算法会发生什么,你输入0123456(任一树的水平顺序遍历)和0214365(其中一个镜像的水平顺序遍历)。算法可以说什么?如果它说它们会反映出来,那么如果你输入第二个输入树就会出错。如果它说它们不是镜像,那么如果你输入第一个输入树就会出错。因此,算法无法始终产生正确的答案。
希望这有帮助!
答案 1 :(得分:0)
根据一般定义,在完整的二叉树中,除了可能是最后一个之外的每个级别都被完全填充,并且所有节点都尽可能地离开。因此,完整的二叉树可以具有仅具有一个子节点的节点(例如,具有一个左子节点的一个根节点是完整的二叉树)。除了叶子之外的所有节点都有2个子节点的树称为完整二叉树。
对于完整的二叉树,问题将是微不足道的。从上到下开始,对于ith
级别,您需要比较给定级别顺序遍历A和B的2^i
元素(根为0th
级别)。对于任何给定i
,来自A的2^i
元素集合应该等于来自B的这些元素的反面。但是,最后一个级别可能没有完全填充,您需要考虑到
对于完整的二叉树,其中唯一的约束是每个节点有2个子节点或没有子节点,除非你自己构造了树,否则它是不可能的。并且您不能仅使用级别顺序遍历来构造树。 templatetypedef提供了一个很好的例子。