• 【树】在二叉树中增加一行 层序遍历


    题目描述

    给定一个二叉树的root和两个整数val和depth,在给定的深度depth处添加一个值val的节点行。注意,根节点root位于深度1.

    示例1:

    输入:root=[4,2,6,3], val=1, depth=1

    输出:[1,4,null,2,6,3]

    解题思路

    使用层序遍历,来解决这个问题;这里会使用到队列,层序遍历实现思路如下:

    1. 先把root写入到队列中;
    2. 如果队列不为空,则继续执行,否则跳出循环。
    3. 循环体中,从队列中取出数据,并且如果有左子树则把左子树加入队列,如果有右子树则把右子树加入队列。

    接着考虑,在给定的深度depth处添加一个值val的节点行。

    1. 如何获取深度,每次遍历完成一次,则把深度加1;
    2. 找到指定的深度后,只需要添加左子树或者右子树,就完成代码了。

    代码实现

    1. import org.example.TreeNode;
    2. import java.util.Deque;
    3. import java.util.LinkedList;
    4. class Solution1 {
    5. public TreeNode addOneRow(TreeNode root, int val, int depth) {
    6. if (depth == 1) {
    7. TreeNode node = new TreeNode(val);
    8. node.left = root;
    9. return node;
    10. }
    11. TreeNode root0 = root;
    12. Deque deque = new LinkedList<>();
    13. if (root != null) {
    14. deque.offer(root);
    15. }
    16. int count = 0;
    17. while (!deque.isEmpty()) {
    18. count++;
    19. int sz = deque.size();
    20. for (int i = 0; i < sz; i++) {
    21. TreeNode node = deque.poll();
    22. if (count == depth - 1) {
    23. TreeNode left = node.left;
    24. TreeNode right = node.right;
    25. node.left = new TreeNode(val);
    26. node.left.left = left;
    27. node.right = new TreeNode(val);
    28. node.right.right = right;
    29. } else {
    30. if (node.left != null) {
    31. deque.offer(node.left);
    32. }
    33. if (node.right != null) {
    34. deque.offer(node.right);
    35. }
    36. }
    37. }
    38. }
    39. return root0;
    40. }
    41. }

    总结

    这道题比较复杂的点是理解题目,什么时候需要添加新节点,层序遍历属于标准流程。

    这里使用时我遇到一个耗时优化点,就是使用队列时到底用哪种实现,最开始我使用ArrayDeque发现耗时还是挺高的,主要原因是在offer和poll操作影响耗时。后来切换成LinkedList后,发现耗时就降低下来了,原因是在offer和poll操作时,只需要移动当前元素,更加适合这种频繁变更的场景。

  • 相关阅读:
    stableDiffusion安装
    java毕业生设计校园社团管理系统计算机源码+系统+mysql+调试部署+lw
    2023蓝海赛道小说推文和短剧推广的授权方式
    Web安全技能树-资源汇总
    LAMM: Label Alignment for Multi-Modal Prompt Learning
    AtCoder—E - Σ[k=0..10^100]floor(X/10^k
    2310C++子类已调用基类构造器
    索引与事务
    如何通过GDB分析Native Crash
    回溯算法总结
  • 原文地址:https://blog.csdn.net/weiliuhong1/article/details/126186381