LeetCode--Python解析【Binary Tree Inorder Traversal】(94)

题目:


首先说说二叉树的遍历,分为,前序,中序和后序遍历

前序遍历:根结点、左子树、右子树。

中序遍历:左子树、根结点、右子树。

后序遍历:左子树、右子树、根结点。

方法一:递归

递归的方法很简单,反复调用方法本身,当其没有左右孩子时,返回该节点的值,

再根据中序遍历的顺序对二叉树进行遍历。

代码如下。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def inorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if root is None:
            return []
        elif root.left is None and root.right is None:
            return [root.val]
        else:
            return self.inorderTraversal(root.left) + [root.val] +  self.inorderTraversal(root.right)

方法二:迭代
迭代方法对比递归的方法就稍显复杂,需要构建一个零时的堆栈

从根节点开始,如果其有左孩子节点,则入栈,再判断其左孩子是否有左孩子节点,以此类推。

当没有左孩子节点时,将该节点和其双亲节点出栈加入res列表,再将其双亲节点的右孩子节点入栈,寻找其左孩子节点,以此类推。

代码如下。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def inorderTraversal(self, root):  
        res = []
        self.iterative_inorder(root,res)
        print(res)
        return res
    def iterative_inorder(self, root, res):
        temp = []
        while root or temp:
            if root:
                temp.append(root)
                root = root.left
            else:
                root = temp.pop(-1)
                res.append(root.val)
                root = root.right
        return res



猜你喜欢

转载自blog.csdn.net/zjrn1027/article/details/80306931