3.9python如何复制二叉树

题目描述:

给定一个二叉树根结点,复制该树,返回新建树的根结点。

思路:
用给定的二叉树的根结点root来构造新的二叉树的方法为,首先创建新的结点 dupTree,然后根据 root 结点来构造 dupTree 结点(dupTree.data=root.data),最后分别用 root 的左右子树来构造 dupTree的左右子树。

算法性能分析:

这种方法对给定的二叉树进行了一次遍历,所以时间复杂度为O(n);
因为新建结点来保存新的树所以空间复杂度为O(n);

代码实现:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2020/1/26 9:40
# @Author  : buu
# @Software: PyCharm
# @Blog    :https://blog.csdn.net/weixin_44321080
class BiTNode:
    def __init__(self):
        self.data = None
        self.lchild = None
        self.rchild = None


def constructTree():
    """
    构造二叉树
    :return:
    """
    root = BiTNode()
    node1 = BiTNode()
    node2 = BiTNode()
    node3 = BiTNode()
    node4 = BiTNode()
    root.data = 6
    node1.data = 3
    node2.data = -7
    node3.data = -1
    node4.data = 9
    root.lchild = node1
    root.rchild = node2
    node1.lchild = node3
    node1.rchild = node4
    node2.lchild = node2.rchild = node3.rchild = node3.lchild = \
        node4.lchild = node4.rchild = None
    return root


def createDupTree(root):
    if root == None:
        return
    dupTree = BiTNode()
    dupTree.data = root.data
    dupTree.lchild = createDupTree(root.lchild)  # 复制左子树
    dupTree.rchild = createDupTree(root.rchild)  # 复制右子树
    return dupTree


def printTreeMidOrder(root):
    if root == None:
        return
    if root.lchild != None:
        printTreeMidOrder(root.lchild)
    print(root.data, end=' ')
    if root.rchild != None:
        printTreeMidOrder(root.rchild)


if __name__ == '__main__':
    root1 = constructTree()
    root2 = createDupTree(root1)
    print('mid order traverse before: ', end='')
    printTreeMidOrder(root1)
    print()
    print('mid order traverse after: ', end='')
    printTreeMidOrder(root2)

结果:
在这里插入图片描述
end

发布了76 篇原创文章 · 获赞 2 · 访问量 2555

猜你喜欢

转载自blog.csdn.net/weixin_44321080/article/details/104085960