python 用列表递归创建二叉树
先上代码
class node(): def __init__(self, k=None, l=None, r=None): self.val = k self.left = l self.right = r def listcreattree(root,llist,i):###用列表递归创建二叉树, 它其实创建过程也是从根开始a开始,创左子树b,再创b的左子树,如果b的左子树为空,返回none。 再接着创建b的右子树, if i<len(llist): if llist[i] =='#': return None ###这里的return很重要 else: root=node(k=llist[i]) print i root.left=listcreattree(root.left,llist,2*i+1) root.right=listcreattree(root.right, llist,2*i+2) return root ###这里的return很重要 return root
if __name__ == '__main__': root=node() llist=['1','2','3','#','4','5'] root=listcreattree(root,llist,0)
创建二叉树的过程如下图,
其实在我前一篇用控制台输入创建二叉树的文章中,创建的顺序也是这样的(链接http://blog.****.net/lznsay/article/details/78705059),只不过由于是控制台的输入,所以没有列表下标由于递归出栈而改变的问题。所以在列表中,下标小的不一定是先创建出的节点