
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
return [] if root is None else [root.val] + self.preorderTraversal(root.left) +self.preorderTraversal(root.right)
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if root is None:
return []
stack, output = [root], []
while stack:
root = stack.pop()
if root is not None:
output.append(root.val)
if root.right is not None:
stack.append(root.right)
if root.left is not None:
stack.append(root.left)
return output

这题和98基本上是一模一样,所以写98题之后,顺便写了97题,刚好想用一行写完,就有了下面的写法。大家以后写的时候可以多试试,有很大的成就感,而且为枯燥的刷题生活,增添一点乐趣。今天暂时先写个中序遍历吧,等过几天在写个前序和中序,还有ass要做,哭ing。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
return [] if root is None else self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res,stack,p = [],[],root
while p or stack:
# 把左子树压入栈中
while p:
stack.append(p)
p = p.left
# 输出 栈顶元素
tmp = stack.pop()
res.append(tmp.val)
# 看右子树
p = tmp.right
return res

# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
return [] if root is None else self.postorderTraversal(root.left) + self.postorderTraversal(root.right) +[root.val]
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if root is None:
return []
stack, output = [root ], []
while stack:
root = stack.pop()
output.append(root.val)
if root.left is not None:
stack.append(root.left)
if root.right is not None:
stack.append(root.right)
return output[::-1]
二叉树遍历算法详解

本文深入探讨了二叉树的前序、中序和后序遍历算法,提供了递归与非递归实现方式,并附有Python代码示例。通过本文,读者将全面理解二叉树遍历的基本原理及其实现细节。
694

被折叠的 条评论
为什么被折叠?



