递归------python实现列表创建二叉树
# 列表转二叉树
def list2BinaryTree(self, root, list, i): # i表示
if i < len(list):
if list[i] == None: # 节点是空的时候 返回空
return None
else:
root = TreeNode(list[i])
root.left = self.list2BinaryTree(root.left, list, i*2+1)
root.right = self.list2BinaryTree(root.right, list, i*2+2)
return root
return root
1 # -*- coding:utf-8 -*-
2
3 '二叉树结点类'
4 class TreeNode:
5 def __init__(self, x):
6 self.val = x
7 self.left = None
8 self.right = None
9
10 '列表创建二叉树'
11 def listcreattree(root,llist,i):###用列表递归创建二叉树,
12 #它其实创建过程也是从根开始a开始,创左子树b,再创b的左子树,如果b的左子树为空,返回none。
13 #再接着创建b的右子树,
14 if i<len(llist):
15 if llist[i] =='#':
16 return None ###这里的return很重要
17 else:
18 root=TreeNode(llist[i])
19 print('列表序号:'+str(i)+' 二叉树的值:'+str(root.val))
20 #往左递推
21 root.left=listcreattree(root.left,llist,2*i+1)#从根开始一直到最左,直至为空,
22 #往右回溯
23 root.right=listcreattree(root.right, llist,2*i+2)#再返回上一个根,回溯右,
24 #再返回根'
25 print('************返回根:',root.val)
26 return root ###这里的return很重要
27 return root
28 llist=['1','2','3','#','4','5']
29 listcreattree(None,llist,0)
运行结果:
1 列表序号:0 二叉树的值:1
2 列表序号:1 二叉树的值:2
3 列表序号:4 二叉树的值:4
4 ************返回根: 4
5 ************返回根: 2
6 列表序号:2 二叉树的值:3
7 列表序号:5 二叉树的值:5
8 ************返回根: 5
9 ************返回根: 3
10 ************返回根: 1
分类: python剑指offer