[Leetcode][python]Binary Tree Preorder Traversal/二叉树的前序遍历

题目大意

二叉树前序遍历
挑战:迭代解题

解题思路

递归简单

迭代思路:见下方代码前

              1

       /     \ 
      2         3

    /     \    /    \ 
    4       5  6      7 

代码

递归

class Solution(object):
    def _preorderTraversal(self, root, result):
        if root:
            result.append(root.val)
            self._preorderTraversal(root.left, result)
            self._preorderTraversal(root.right, result)
    def preorderTraversal(self, root):
        """ :type root: TreeNode :rtype: List[int] """
        if root == None:
            return []
        result = []
        self._preorderTraversal(root, result)
        return result

迭代

1.根节点入栈
2.取出节点,值加入结果,然后先加右,后加左。
3.重复2

注意:就算节点没有孩子,其指向孩子的指针(node.left)是None,不会报错

但是如果取值node.left.val,则会报错。所以最好是像要判断一下if node.left/right,因为这样栈中就不会有None,多浪费了时间。

while stack:
    node = stack.pop()
    if node:
        ret.append(node.val)
        stack.append(node.right)
        stack.append(node.left)

<precompiled.treenode.TreeNode object at 0x7f19ec21fc90>
None
None
class Solution(object):
    def preorderTraversal(self, root):
        """ :type root: TreeNode :rtype: List[int] """
        ret = []
        stack = [root]
        while stack:
            node = stack.pop()
            if node:
                ret.append(node.val)
                if node.right:
                    stack.append(node.right)
                if node.left:
                    stack.append(node.left)
        return ret

总结

全部评论

相关推荐

专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务