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.csdn.net/lznsay/article/details/78705059),只不过由于是控制台的输入,所以没有列表下标由于递归出栈而改变的问题。所以在列表中,下标小的不一定是先创建出的节点

你可能感兴趣的:(python 用列表递归创建二叉树)