题解 | 二叉树的前序遍历

二叉树的前序遍历

https://www.nowcoder.com/practice/5e2135f4d2b14eb8a5b06fab4c938635

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param root TreeNode类
# @return int整型一维数组
#
class Solution:
    # 法一:递归法
    # def preorder (self,root:TreeNode,res:List[int]):
    #     if root==None:
    #         return
    #     else:
    #         #遍历顺序为先遍历根
    #         res.append(root.val)
    #         #再遍历左子树
    #         self.preorder(root.left,res)
    #         #最后遍历右子树
    #         self.preorder(root.right,res)

    # def preorderTraversal(self , root: TreeNode) -> List[int]:
    #     # write code here
    #     res=[]
    #     self.preorder(root,res)
    #     return res

    # 法二:利用栈的先进后出特点
    # 1.先将根放入栈中
    # 2.然后取出栈顶的值,并把其左右子树放入栈中(注意左子树要在右子树上方,所以先放右子树)
    # 3.反复循环,直到栈为空
    # 栈能保证左子树输出完,再输出右子树
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        res = []
        stack = []
        if not root:#根为空节点直接返回答案为空
            return res
        stack.append(root)#将根节点放入栈中

        while stack:# 栈不空就反复运行
        #取栈顶的值放入res中,并把其左右子树重新放回栈中
            stack_top = stack[-1]#取出栈顶元素
            stack.pop()
            res.append(stack_top.val)
            #如果栈顶元素还有右子树,就入栈(先放右子树,才能保证栈顶为左子树)
            if stack_top.right:
                stack.append(stack_top.right)
            #如果栈顶元素还有左子树,就入栈
            if stack_top.left:
                stack.append(stack_top.left)

 

        #循环结束即为答案
        return res
    

全部评论

相关推荐

提前批过程记录base上海
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
07-10 14:08
已编辑
江西农业大学 Java
拒绝无效加班的小学生...:期望3k吗?java这辈子有了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务