zoukankan      html  css  js  c++  java
  • 【LeetCode每天一题】Binary Tree Preorder Traversal(前序遍历)

    Given a binary tree, return the preorder traversal of its nodes' values.

    Example:

    Input: [1, null, 1,2,3 ]
    1 2 / 3 Output: [1,2,3]

    Follow up: Recursive solution is trivial, could you do it iteratively?

    思路


      二叉树的前序遍历方法分为递归法和使用循环辅助栈的方法,递归方法我们在递归左右节点之前先将当前节点的值添加进结果集中,然后进行递归。递归的结束条件是当节点为空时直接返回。循环辅助栈的方法就是我们申请一个栈,然后添加根节点到其中。执行循环遍历,最后循环体中我们先添加右节点,在添加左节点。每次弹出栈中最上面的节点。网栈为空时,循环结束。

    解决代码


     循环解决代码

     1 # Definition for a binary tree node.
     2 # class TreeNode(object):
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.left = None
     6 #         self.right = None
     7 
     8 class Solution(object):
     9     def preorderTraversal(self, root):
    10         """
    11         :type root: TreeNode
    12         :rtype: List[int]
    13         """
    14         if not root:
    15             return []
    16         
    17         res = []          # 结果集
    18         stack = [root]      # 辅助栈
    19         while stack:          # 循环条件
    20             tem = stack.pop()     # 弹出最上层的节点
    21             if tem.right:          # 先判断当前节点的右节点
    22                 stack.append(tem.right)
    23             if tem.left:             # 在判断当前节点的左节点
    24                 stack.append(tem.left)
    25             res.append(tem.val)          # 将节点值添加进结果集中
    26         return res             # 返回结果集

     递归解决代码

     1 # Definition for a binary tree node.
     2 # class TreeNode(object):
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.left = None
     6 #         self.right = None
     7 
     8 class Solution(object):
     9     def preorderTraversal(self, root):
    10         """
    11         :type root: TreeNode
    12         :rtype: List[int]
    13         """            
    14         if not root:      # 为空直接返回
    15             return 
    16         res = []
    17         self.tarversal(root, res)  # 开始递归
    18         return res
    19         
    20     def tarversal(self, root, res):
    21         if not root:        # 当前为空节点直接返回
    22             return
    23         res.append(root.val)      # 将当前节点的值添加进其中
    24         self.tarversal(root.left, res)      # 遍历左节点
    25         self.tarversal(root.right, res)     # 遍历右节点
  • 相关阅读:
    NOJ 1116 哈罗哈的大披萨 【淡蓝】 [状压dp+各种优化]
    Codeforces Round #278 (Div. 2) B. Candy Boxes [brute force+constructive algorithms]
    noj 2069 赵信的往事 [yy题 无限gcd]
    noj 2068 爱魔法的露露 [线性扫一遍]
    Codeforces Round #275 (Div. 2) B. Friends and Presents 二分+数学
    Word2007文档中怎么输入上标下标
    Linux下查找命令
    矩阵求逆
    LRC算法在人脸识别中应用
    java从txt文档读写数据
  • 原文地址:https://www.cnblogs.com/GoodRnne/p/10963509.html
Copyright © 2011-2022 走看看