#二叉树采用顺序存储结构,设计一个算法将二叉树bt1复制到二叉树bt2
#这里体现了递归构建的主要思想:构造大问题小问题。假设大问题是最后的根节点和左右子树,小问题是左右子树
#现在按照递归的思路是根节点未复制,而左右子树可复制。要做的就是复制根节点。
#解释一下二叉树复制:在原来的树里放一个结点指针,在新建立的空树放一个结点指针,原来的树结点指针走一步,新建立的树的结点也跟着走并且输入原来树指针指向结点的内容
#二叉树采用顺序存储结构,设计一个算法将二叉树bt1复制到二叉树bt2
#这里体现了递归构建的主要思想:构造大问题小问题。假设大问题是最后的根节点和左右子树,小问题是左右子树
#现在按照递归的思路是根节点未复制,而左右子树可复制。要做的就是复制根节点。
#解释一下二叉树复制:在原来的树里放一个结点指针,在新建立的空树放一个结点指针,原来的树结点指针走一步,新建立的树的结点也跟着走并且输入原来树指针指向结点的内容
def CopyBTree1(bt1):#bt1是被复制的树,bt2是复制出来的新树
bt2=BTree()#为新树创造一个树的存储空间,并且将此树命名为bt2
bt2.SetRoot(_CopyBTree1(bt1.b))#为树bt2设置根节点,根节点为复制过后bt1的根节点
#这样做是把bt1的根节点一下所有的结点都复制了进去
return bt2
def _CopyBTree1(t1):
if t1==None:
return None
else:#t2始终跟着t1走,用t1里面的值建立一个新结点,然后用t2指向它
t2=BTNode(t1.data)#BTNode(t1.data)是以t1这个指针指向的结点的值创建一个新结点,并且用t2指向它
t2.lchild=_CopyBTree1(t1.lchild)#BTNode(t1.lchild)是以t1.lchild这个指针指向的结点的值创建一个新结点,并且把t2的左孩子域指向它
t2.rchild=_CopyBTree1(t1.rchild)#BTNode(t1.rchild)是以t1.rchild这个指针指向的结点的值创建一个新结点,并且把t2的右孩子域指向它
return t2
#这个算法是用递归的思想,但我觉得差异不大,只是找了个中间商
def CopyBTree2(bt1):
bt2=BTree()
bt2.SetRoot(_CopyBTree2(bt1.b)
return bt2
def _CopyBTree2(t1):
l=_CopyBTree2(t1.lchild)#l用于存放递归完成的所有左子树
r=_CopyBTree2(t1.rchild)#r用于存放递归完成的所有右子树
t2.lchild=l#再赋值
t2.rchild=r
return t2