代码随想录算法训练营第十四天| 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历
2023-12-14 23:48:43
代码随想录算法训练营第十四天| 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历
题目
144.二叉树的前序遍历
给你二叉树的根节点 root
,返回它节点值的 前序 遍历。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
# 递归
# if root is None:
# return []
# left = self.preorderTraversal(root.left)
# right = self.preorderTraversal(root.right)
# return [root.val] + left + right
# 非递归用栈来模拟
# 根左右
# 栈的特性就是先进后出,所以在根结点保存后,要先右结点进去
if not root:
return []
stack = [root]
# 存放结果
res = []
while stack:
node = stack.pop()
res.append(node.val)
# 根左右,因此先放右再放左
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return res
题目
94.二叉树的中序遍历
给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
# 递归
# if root is None:
# return []
# left = self.inorderTraversal(root.left)
# right = self.inorderTraversal(root.right)
# return left + [root.val] + right
# 非递归
if root is None:
return []
stack = []
res = []
cur = root
while cur or stack:
# 当前值不为空,就一直往下找最左下角,如果当前值为空就把它输出了,然后当前值到它的右下角
if cur:
stack.append(cur)
cur = cur.left
else:
cur = stack.pop()
res.append(cur.val)
cur = cur.right
return res
题目
145.二叉树的后序遍历
给你一棵二叉树的根节点 root
,返回其节点值的 后序遍历 。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
# 递归
# if root is None:
# return []
# left = self.postorderTraversal(root.left)
# right = self.postorderTraversal(root.right)
# return left + right + [root.val]
# 非递归
# 前序遍历是根左右,后序遍历是左右根
# 那我们直接遍历左右根的逆序根右左,然后再进行逆序输出
if root is None:
return []
stack = [root]
res = []
while stack:
node = stack.pop()
res.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return res[::-1]
文章来源:https://blog.csdn.net/qq_46528858/article/details/135006281
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!