zoukankan      html  css  js  c++  java
  • 【LeetCode每天一题】Binary Tree Inorder Traversal(二叉树的中序遍历)

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

    Example:

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

    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 inorderTraversal(self, root):
    10         """
    11         :type root: TreeNode
    12         :rtype: List[int]
    13         """
    14         if not root:   # 空节点直接返回
    15             return []
    16         res  =[]
    17         self.indorder(root, res)     # 中序遍历
    18         return res
    19     
    20     def indorder(self, root, res):    # 中序遍历函数
    21         if not root:
    22             return
    23         
    24         self.indorder(root.left, res)
    25         res.append(root.val)
    26         self.indorder(root.right, 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 inorderTraversal(self, root):   
    14         if not root:
    15             return []
    16         res = []      #   记录结果列表
    17         stack = []
    18         while stack or root:    # 循环条件
    19             if root:               # 中序遍历,需要先将左边节点遍历完毕。
    20                 stack.append(root)
    21                 root = root.left
    22             else:                # 意味左节点为空,这时进行弹出。并遍历弹出节点的右子树。
    23                 root = stack.pop()
    24                 res.append(root.val)
    25                 root = root.right
    26         return res
  • 相关阅读:
    1152 Google Recruitment (20 分)
    1095 解码PAT准考证 (25 分)
    1093 字符串A+B (20 分)
    1094 谷歌的招聘 (20 分)
    拖动无边框窗体
    全屏显示窗体
    动态按钮的窗体界面
    以树形显示的窗体界面
    设计软件启动界面
    动画显示窗体
  • 原文地址:https://www.cnblogs.com/GoodRnne/p/10834398.html
Copyright © 2011-2022 走看看