我有两个二叉树T1
和T2
,他们都是性格树木,这意味着:这是说法正确(用于确定一树是另一个子树)
struct TreeNode
{
char data;
TreeNode* left;
TreeNode* right;
TreeNode(const char d, TreeNode* const lptr = NULL,
TreeNode* const rptr = NULL)
: data(d), left(lptr), right(rptr){}
};
如果PreOrder2
是PreOrder1
和InOrder2
的子串是InOrder1
的子串,则T2
是T1
的子树。
上述说法是否正确?树平等的
定义:如果T1
和T2
具有完全相同的数据值和分配,然后T1 == T2
,否则T1 != T2
(NULL树木是相等的)。子树的
定义:如果在该T1
N1 == T2
存在至少一个节点N1
,然后T2
是T1
的子树。
基本上,我不是在谈论节点地址的等价性;我正在谈论树的数据值和分布。
==编辑==
我认为这不是真的。有可能是T1
中有两个子树,其中一个具有与T2
相同的PreOrder,另一个具有与T2
相同的InOrder。
现在我的问题变成:是否有一个简单的方法来确定T2
是T1
使用遍历的子树?
== EDIT ==
一个典型的例子,以使语句为false:
T1:
A
B C
C B
D D
T2:
B
C D
另一个T1:
A
A A
B B C
C D B
D C D
我认为括号内的InOrder,即(LSR)(左,自,右)可以用来确定子树的存在。我将不得不考虑明天:) – AlexDev