在二叉树中增加一行

给定一个二叉树,根节点为第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 时会递归回来了,

 /**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode addOneRow(TreeNode root, int v, int d) {
if(root == null)
return null;
//如果插到根节点位置
if(d==1){
TreeNode newleft=new TreeNode(v);
newleft.left = root;
root = newleft;
}else if(d==2){ //如果插入到根节点下面,即第二行
TreeNode newleft = new TreeNode(v);
TreeNode newright = new TreeNode(v);
newleft.left = root.left;
newright.right = root.right;
root.left = newleft;
root.right = newright; }else{ //如果插入到第二行之后
//递归,缩小范围(取子树root.left,root.right),相当于插入的深度减少一层(d-1)
addOneRow(root.left,v,d-1);
addOneRow(root.right,v,d-1); }
return root; }
}

Leetcode 623.在二叉树中增加一行的更多相关文章

  1. Java实现 LeetCode 623 在二叉树中增加一行(遍历树)

    623. 在二叉树中增加一行 给定一个二叉树,根节点为第1层,深度为 1.在其第 d 层追加一行值为 v 的节点. 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N, ...

  2. LeetCode——623.在二叉树中增加一行

    给定一个二叉树,根节点为第1层,深度为 1.在其第 d 层追加一行值为 v 的节点. 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左 ...

  3. [LeetCode] 623. Add One Row to Tree 二叉树中增加一行

    Given the root of a binary tree, then value v and depth d, you need to add a row of nodes with value ...

  4. [LeetCode] Add One Row to Tree 二叉树中增加一行

    Given the root of a binary tree, then value v and depth d, you need to add a row of nodes with value ...

  5. [Swift]LeetCode623. 在二叉树中增加一行 | Add One Row to Tree

    Given the root of a binary tree, then value v and depth d, you need to add a row of nodes with value ...

  6. ASP.net中GridView中增加一行记录并默认显示为编辑状态

    //添加 protected void Button1_Click(object sender, EventArgs e) { DataSet ds = (DataSet)pa.GetDataSet( ...

  7. 【Leetcode】查找二叉树中任意结点的最近公共祖先(LCA问题)

    寻找最近公共祖先,示例如下: 1 /           \ 2           3 /    \        /    \ 4    5      6    7 /    \          ...

  8. leetcode:124. 二叉树中的最大路径和

    题目描述: 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: [1,2,3] 1 ...

  9. PHP实现单击“添加”按钮增加一行表单项,并将所有内容插入到数据库中

    PHP实现单击“添加”按钮增加一行表单项,并将所有内容插入到数据库中 效果图: html+jquery: <html> <head> <meta http-equiv=& ...

随机推荐

  1. SqlServer图形数据库初体验

    SQL Server2017新增了一个新功能叫做图形数据库.图形指的拓扑图形,是一些Node表和Edge表的合集,Node对应关系数据库中的实体,比如一个人.一个岗位等,Edge表指示Node之前的关 ...

  2. linux 命令——48 watch (转)

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...

  3. 运维如何延续自己的职业生涯--萧田国2017年GOPS深圳站演讲内容

    正如 萧田国在2017年GOPS深圳站演讲所提及的,运维职业生涯规划,应该是T字型. 关于指导原则,正如腾讯好友@赵建春所言: 如果一个领域不能做到TOP,那就是一种伤害. 运维在编程.开发领域,能做 ...

  4. py2exe --- show error: MSVCP90.dll + matplotlib issues

    问题1: show error: MSVCP90.dll: No such file or directory 创建生成exe文件的脚本添加: import py2exe from distutils ...

  5. 【转帖】Linux mount 域控权限的共享目录

    https://www.linuxidc.com/Linux/2012-09/71388.htm 之前一直以为没法 映射 home 域的内容 其实还有一个地方.. 注意 空格的话 需要用 \ 进行转移 ...

  6. axiospost请求向后端提交数据

    Axios向后端提交数据容易接收不到原因是传参方式是request payload,参数格式是json,而并非用的是form传参,所以在后台用接收form数据的方式接收参数就接收不到了.post表单请 ...

  7. c++中 endl的意思?

    endl是 end line的意思,表示此行结束,换行,就是回车

  8. node第一天

    一.主要执行的文件命名一般为main.js var aModule =require('./a.js');//相对路径 var aModule =require('a.js');//专门从node_m ...

  9. C++ 无限定名称查找

    无限定名称查找 (关键字:懒惰,挑捡,using指令的特殊性) 无限定名称查找实际上就是指没有限定(名称空间和名称空间运算符)名存在的一个名字的出现,其中对于using指令,其内部包含的所有的声明是被 ...

  10. C++ 学习笔记 (七)继承与多态 virtual关键字的使用场景

    在上一篇 C++ 学习笔记 (六) 继承- 子类与父类有同名函数,变量 中说了当父类子类有同名函数时在外部调用时如果不加父类名则会默认调用子类的函数.C++有函数重写的功能需要添加virtual关键字 ...