LeetCode每天一题Binary Tree Preorder Traversal(前序遍历)

Posted goodrnne

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)     # 遍历右节点

以上是关于LeetCode每天一题Binary Tree Preorder Traversal(前序遍历)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode每天一题Construct Binary Tree from Preorder and Inorder Traversal(使用前序和中序遍历构建二叉树)

LeetCode每天一题Same Tree(相同的树)

每天一题LeetCode 67. 二进制求和

LeetCode二叉查找树 binary search tree(共14题)

LeetCode算法题-Lowest Common Ancestor of a Binary Search Tree

LeetCode每天一题3Sum(三数之和)