Python递归方法中的前序遍历

2024-10-01 13:36:03 发布

您现在位置:Python中文网/ 问答频道 /正文

Why is this struck in loop,Can you please help me

class createTreeNode():

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


def preOrderTraversal(root):

    while(root):
        print root.value
        preOrderTraversal(root.left)
        preOrderTraversal(root.right)

    return
def insertNodetoBST(root,i):

    if(root==None):
        return createTreeNode(i)
    temproot=root;
    while(temproot):
        if(temproot.value>i):
            if(temproot.left==None):
                temproot.left=createTreeNode(i)
                return root
            temproot = temproot.left
        else:
            if (temproot.right == None):
                temproot.right = createTreeNode(i)
                return root
            temproot=temproot.right
    return root



def createBSTfromList():

    root=None
    l = [1,2]
    for i in l:
        root=insertNodetoBST(root,i);
    preOrderTraversal(root);

createBSTfromList();

Tags: inselfrightnonereturnifvaluedef
1条回答
网友
1楼 · 发布于 2024-10-01 13:36:03

因为您的preOrderTraversal函数中有while(root),所以代码将永远循环。由于在循环体期间没有将root修改为任何错误,因此如果root不是None开始的话,它将永远运行。在

我想你希望那行是if root。这样,您可以运行块0次(基本情况)或一次(递归情况):

def preOrderTraversal(root):
    if root:
        print root.value
        preOrderTraversal(root.left)
        preOrderTraversal(root.right)

ifwhile语句的条件周围不需要括号。你也不需要在行尾加上分号。您可能需要阅读PEP 8,这是Python代码的样式指南。在

相关问题 更多 >