# -*- 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()
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.9 如何复制二叉树
猜你喜欢
转载自blog.csdn.net/qingyuanluofeng/article/details/91900005
今日推荐
周排行