您当前的位置: 首页 > 

宝哥大数据

暂无认证

  • 0浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

144. 二叉树的前序遍历

宝哥大数据 发布时间:2019-11-27 15:21:03 ,浏览量:0

一、144. 二叉树的前序遍历 1.1、题目描述 1.2、题解 1.2.1、递归: 根节点->左子树->右子树
class Solution:
    def __init__(self) -> None:
        self.ans = []
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        if not root : return []
        self.ans.append(root.val)
        if root.left:
            self.preorderTraversal(root.left)
        if root.right:
            self.preorderTraversal(root.right)
        return self.ans 
1.2.2、栈+迭代
class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        if not root : return []
        ans = []
        _stack = [root]
        
        while _stack:
            # 弹出栈顶元素
            curNode = _stack.pop()
            ans.append(curNode.val)

            # 先入右节点
            if curNode.right:
                _stack.append(curNode.right)

            if curNode.left:
                _stack.append(curNode.left)
        return ans 
1.2.3、Morris遍历
class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        node, output = root, []
        while node:  
            if not node.left: 
                output.append(node.val)
                node = node.right 
            else: 
                predecessor = node.left 

                while predecessor.right and predecessor.right is not node: 
                    predecessor = predecessor.right 

                if not predecessor.right:
                    output.append(node.val)
                    predecessor.right = node  
                    node = node.left  
                else:
                    predecessor.right = None
                    node = node.right         

        return output
关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0431s