Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.9 如何复制二叉树

# -*- coding: utf-8 -*-

'''
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.9 如何复制二叉树

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

分析:
可以先复制根节点,然后复制左子树,复制右子树;
对于左子树,对左子树根节点重复上述操作,即可

关键:

参考:
Python程序员面试算法宝典
'''

class BinaryTreeNode(object):

    def __init__(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right


def buildTree(data):
    if not data:
        return
    nodes = list()
    for value in data:
        node = BinaryTreeNode(value)
        nodes.append(node)
    size = len(data)
    for i in range(size):
        if not nodes[i]:
            continue
        if 2 * i + 1 < size:
            nodes[i].left = nodes[2 * i + 1]
        if 2 * i + 2 < size:
            nodes[i].right = nodes[2 * i + 2]
    return nodes[0]


def copyTree(root):
    if not root:
        return
    left = copyTree(root.left)
    right = copyTree(root.right)
    newRoot = BinaryTreeNode(root.data)
    newRoot.left = left
    newRoot.right = right
    return newRoot


def inOrder(root):
    if not root:
        return
    inOrder(root.left)
    print root.data
    inOrder(root.right)


def process():
    data = list(range(1, 8))
    root = buildTree(data)
    newRoot = copyTree(root)
    print "origin in order"
    inOrder(root)
    print "new in order"
    inOrder(newRoot)


if __name__ == "__main__":
    process()

猜你喜欢

转载自blog.csdn.net/qingyuanluofeng/article/details/91900005