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 }

原文地址:https://www.cnblogs.com/kexinxin/p/10381428.html

时间: 2024-10-11 08:30:34

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

[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 v at the given depth d. The root node is at depth 1. The adding rule is: given a positive integer depth d, for each NOT null tree nodes N in depth d-

leetcode 979. 在二叉树中分配硬币

目录 题目描述: 示例 1: 示例 2: 示例 3: 示例 4: 解法: 题目描述: 给定一个有 N 个结点的二叉树的根结点 root,树中的每个结点上都对应有 node.val 枚硬币,并且总共有 N 枚硬币. 在一次移动中,我们可以选择两个相邻的结点,然后将一枚硬币从其中一个结点移动到另一个结点.(移动可以是从父结点到子结点,或者从子结点移动到父结点.). 返回使每个结点上只有一枚硬币所需的移动次数. ? 示例 1: 输入:[3,0,0] 输出:2 解释:从树的根结点开始,我们将一枚硬币移到

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

题目描述: 给定一个非空二叉树,返回其最大路径和. 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列.该路径至少包含一个节点,且不一定经过根节点. 示例 1: 输入: [1,2,3] 1 / 2 3 输出: 6 示例 2: 输入: [-10,9,20,null,null,15,7]   -10    /   9  20     /     15   7 输出: 42 思路分析: 路径问题常规想到的就是用搜索解决.这道题用到了dfs,用递归完成.对于每个结点,计算其左右子树的贡献值,

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

PHP实现单击“添加”按钮增加一行表单项,并将所有内容插入到数据库中 效果图: html+jquery: <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script language="javascript" type="text/javascript" src=&qu

Leetcode: Binary Tree Inorder Traversal(二叉树中序遍历)

题目: Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3 return [1,3,2]. Note: Recursive solution is trivial, could you do it iteratively? 递归解法(C++): /** * Definition for binary tre

LeetCode 671. 二叉树中第二小的节点(Second Minimum Node In a Binary Tree) 9

671. 二叉树中第二小的节点 671. Second Minimum Node In a Binary Tree 题目描述 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值. 给出这样的一个二叉树,你需要输出所有节点中的第二小的值.如果第二小的值不存在的话,输出 -1. 每日一算法 2019/5/12Day 9 LeetCode671. Second Minimum Node In a B

LeetCode | 1372. Longest ZigZag Path in a Binary Tree二叉树中的最长交错路径【Python】

LeetCode 1372. Longest ZigZag Path in a Binary Tree二叉树中的最长交错路径[Medium][Python][DFS] Problem LeetCode Given a binary tree root, a ZigZag path for a binary tree is defined as follow: Choose any node in the binary tree and a direction (right or left). I

LeetCode OJ:Kth Smallest Element in a BST(二叉树中第k个最小的元素)

Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Note: You may assume k is always valid, 1 ≤ k ≤ BST's total elements. 求二叉树中第k个最小的元素,中序遍历就可以了,具体代码和另一个Binary Tree Iterator差不多其实,这题由于把=写成了==调bug调了好久,细心细心啊啊

求二叉树中节点的最大距离

题目描写叙述 假设我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两个节点之间的变数. 写一个程序求一棵二叉树中相距最远的两个节点之间的距离. 输入要求 输入的第一行包括单独的一个数字T,表示測试序列的数目: 下面每一行为一个測试序列,測试序列是按先序序列输入字符 ,假设节点没有左或右孩子,则输入用空格表示,最后用一个空格结束一行的输入. 输出要求 输出二叉树中相距最远的两个节点之间的距离 假如输入 2 ABC  DE G  F -+a  *b  -c