二叉树的遍历

一、前序遍历

题目描述:

144. 二叉树的前序遍历

 解法1:递归

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def preorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        # 用来保存结果
        li=[]
        def get(root):  # 前序遍历。根左右
            if root==None:
                return 
            li.append(root.val) # 根
            get(root.left)  # 左子树
            get(root.right) # 右子树
        
        get(root)
        return li

方法2:迭代(用栈)

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def preorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:    # 根节点为空,则返回空列表
            return []
        stack=[root]    # 栈
        res=[]  # 用于存放结果
        # stack.append(root)  根节点入栈
        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

二、后序遍历

题目描述:

​​​​​​145. 二叉树的后序遍历

解法1:递归

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def postorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        # 用啦保存结果
        result=[]

        def get(root):  #后序遍历。左右根
            if root==None:
                return
            get(root.left)  # 左
            get(root.right) # 右
            result.append(root.val) # 根
        
        get(root)
        return result

方法2:迭代(用栈)

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def postorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:
            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]

    

 三、中序遍历

​​​​​​94. 二叉树的中序遍历

题目描述:

解法1:递归

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def inorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        result=[]   # 用于保存结果
        def get(root):  # 中序遍历。左根右
            if root==None:
                return
            get(root.left)
            result.append(root.val)
            get(root.right)
        
        get(root)
        return result

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值