• 算法题练习——NC15 求二叉树的层序遍历、NC88 寻找第K大


    描述

    给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)

    例如:
    给定的二叉树是{3,9,20,#,#,15,7},

    该二叉树层序遍历的结果是
    [[3],[9,20],[15,7]]

    数据范围:二叉树的节点数满足 1 \le n \le 10^5 \1≤n≤105 

    示例1

    输入:{1,2}

    返回值:[[1],[2]]

    示例2

    输入:{1,2,3,4,#,#,5}

    返回值:[[1],[2,3],[4,5]]

    解析:

    • 首先判断二叉树是否为空,空树没有遍历结果。
    • 建立辅助队列,根节点首先进入队列。不管层次怎么访问,根节点一定是第一个,那它肯定排在队伍的最前面。
    • 每次进入一层,统计队列中元素的个数。因为每当访问完一层,下一层作为这一层的子节点,一定都加入队列,而再下一层还没有加入,因此此时队列中的元素个数就是这一层的元素个数。
    • 每次遍历这一层这么多的节点数,将其依次从队列中弹出,然后加入这一行的一维数组中,如果它们有子节点,依次加入队列排队等待访问。
    • 访问完这一层的元素后,将这个一维数组加入二维数组中,再访问下一层。

    JavaScript Node题解:

    1. /*
    2. * function TreeNode(x) {
    3. * this.val = x;
    4. * this.left = null;
    5. * this.right = null;
    6. * }
    7. */
    8. /**
    9. *
    10. * @param root TreeNode类
    11. * @return int整型二维数组
    12. */
    13. function levelOrder( root ) {
    14. // write code here
    15. let res = []
    16. if(!root) return res
    17. let queue = []
    18. queue.push(root)
    19. while(queue.length){
    20. let temp = []
    21. let len = queue.length
    22. for(let i=0; i
    23. let node = queue.shift()
    24. temp.push(node.val)
    25. if(node.left) queue.push(node.left)
    26. if(node.right) queue.push(node.right)
    27. }
    28. res.push(temp)
    29. }
    30. return res
    31. }
    32. module.exports = {
    33. levelOrder : levelOrder
    34. };

    python代码解:

    1. # class TreeNode:
    2. # def __init__(self, x):
    3. # self.val = x
    4. # self.left = None
    5. # self.right = None
    6. #
    7. # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    8. #
    9. #
    10. # @param root TreeNode类
    11. # @return int整型二维数组
    12. #
    13. class Solution:
    14. def levelOrder(self , root: TreeNode) -> List[List[int]]:
    15. if not root: return None
    16. res = []
    17. queue = [root]
    18. while queue:
    19. res.append([node.val for node in queue])
    20. temp = []
    21. for node in queue:
    22. if node.left:
    23. temp.append(node.left)
    24. if node.right:
    25. temp.append(node.right)
    26. queue = temp
    27. return res
  • 相关阅读:
    Rethinking the Inception Architecture for Computer Vision--Christian Szegedy
    Android通过JNI操作GPIO
    丰田工厂停产竟然因为磁盘...
    字节(byte)和位(bit)
    寻找单身狗
    vue3 使用setup语法糖实现分类管理
    HCIP数据通信——SLA与BFD
    java基础:异常篇
    05-jenkins与SonarQube代码审查集成
    git merge 和 git rebese的区别
  • 原文地址:https://blog.csdn.net/weixin_53919192/article/details/126613862