• Leetcode 623.在二叉树中增加一行


    在二叉树中增加一行

    给定一个二叉树,根节点为第1层,深度为 1。在其第 d 层追加一行值为 v 的节点。

    添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左子树和右子树。

    将 N 原先的左子树,连接为新节点 v 的左子树;将 N 原先的右子树,连接为新节点 v 的右子树。

    如果 d 的值为 1,深度 d - 1 不存在,则创建一个新的根节点 v,原先的整棵树将作为 v 的左子树。

    示例 2:

    注意:

    1. 输入的深度值 d 的范围是:[1,二叉树最大深度 + 1]。
    2. 输入的二叉树至少有一个节点。

    思路

    思路:分3种情况:

    (1)插入到根节点位置:d=1

    (2)插入到第二行:d=2

    (3)插入到第二行之后:递归,每次分解成更小的树,即每次迭代为原树的left或right子树,那么插入的层数就也减小一层(d->d-1,只是数值上相对减小一),直到插入的层数减小到2,1 时会递归回来了,

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 class Solution {
    11     public TreeNode addOneRow(TreeNode root, int v, int d) {
    12         if(root == null)
    13             return null;
    14         //如果插到根节点位置
    15         if(d==1){
    16             TreeNode newleft=new TreeNode(v);
    17             newleft.left = root;
    18             root = newleft;
    19         }else if(d==2){  //如果插入到根节点下面,即第二行
    20             TreeNode newleft = new TreeNode(v);
    21             TreeNode newright = new TreeNode(v);
    22             newleft.left = root.left;
    23             newright.right = root.right;
    24             root.left = newleft;
    25             root.right = newright;
    26 
    27         }else{  //如果插入到第二行之后
    28             //递归,缩小范围(取子树root.left,root.right),相当于插入的深度减少一层(d-1)
    29             addOneRow(root.left,v,d-1);
    30             addOneRow(root.right,v,d-1);
    31 
    32         }
    33         return root;
    34 
    35     }
    36 }
  • 相关阅读:
    php注释规范
    Jquery元素选取、常用方法
    pdo 添加数据
    pdo 访问数据库
    session / cookie 区别与应用
    注册审核
    分页 --条件查询再分页
    Python 第二十九章 socket通信
    Python 第二十八章 网络初识+五层协议+三次握手四次挥手
    Python 第二十六章 面向对象 元类+反射+双下方法
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10381428.html
Copyright © 2020-2023  润新知