代码随想录-Day16

lc429. N 叉树的层序遍历

python .extend()与.append()

extend()是将两个list合并成一个list。
append()是将你传入的参数看做一个元素,拼到 上一个list中。

class Solution:
    def levelOrder(self, root: 'Node') -> List[List[int]]:
        results = []
        if not root:
            return results
        
        from collections import deque
        que = deque([root])
        
        while que:
            size = len(que)
           # print(size,que)
            result = []
            for _ in range(size):
                cur = que.popleft()
                result.append(cur.val)
                if cur.children:
                    que.extend(cur.children)############extend与append的区别
            results.append(result)

        return results

python中的.extend()_也许明天,会美好的博客-CSDN博客_python .extend()


遗留问题:

lc226 翻转二叉树【已解决】

迭代法 广度优先(层序遍历)和深度优先(前序遍历)的区别,代码见下:

#深度优先(前序遍历)
class Solution:
    def invertTree(self, root: TreeNode) -> TreeNode:
        if not root:
            return root
        st = []
        st.append(root)
        while st:
            node = st.pop()
            node.left, node.right = node.right, node.left #中
            if node.right:
                st.append(node.right) #右
            if node.left:
                st.append(node.left) #左
        return root
#广度优先(层序遍历)
import collections
class Solution:
    def invertTree(self, root: TreeNode) -> TreeNode:
        queue = collections.deque() #使用deque()
        if root:
            queue.append(root)
        while queue:
            size = len(queue)
            for i in range(size):
                node = queue.popleft()
                node.left, node.right = node.right, node.left #节点处理
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
        return root

二叉树的后续遍历

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def postorderTraversal(self, root: TreeNode) -> List[int]:
        # 注意:根节点为空,直接返回空列表
        if not root:
            return []

        stack = []
        res = []

        while root or stack:
            while root:
                # 当前节点入栈
                stack.append(root)
                # 如果当前节点有左子树,继续向左子树找
                if root.left:
                    root = root.left
                # 如果当前节点无左子树,在右子树继续找
                else:
                    root = root.right
            # 跳出循环的条件是 root 为空,那当前栈顶元素为叶子节点。
            # 弹出栈顶元素,并加入结果数组
            cur = stack.pop()
            res.append(cur.val)
            # 如果栈不为空,且当前栈顶元素的左节点是刚刚跳出的栈顶元素 cur
            # 则转向遍历右子树当前栈顶元素的右子树
            if stack and stack[-1].left == cur:
                root = stack[-1].right
            # 否则证明当前栈顶元素无左右子树,那当前的栈顶元素弹出。
            else:
                root = None

        return res

作者:rocky0429-2
链接:https://leetcode.cn/problems/binary-tree-postorder-traversal/solution/acm-xuan-shou-tu-jie-leetcode-er-cha-shu-q9ep/

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值