二叉树采用顺序存储结构,设计一个算法将二叉树bt1复制到二叉树bt2

#二叉树采用顺序存储结构,设计一个算法将二叉树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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏歌~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值