zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    LaTeX不能识别eps文件?
    ubuntu 11.04系统清理(不断更新。。。)
    换Ubuntu邮件客户端Evolution为Thunderbird
    Byobu:打造多任务的Terminal
    Learning the Vi Editor, 6th Edition学习笔记(1)
    Ubuntu:让桌面显示回收站
    3rd Party Repository for Dropbox
    ubuntu 显示隐藏文件
    Ubuntu下的一款Dock工具AWN
    i686和x86_64的区别
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10381428.html
Copyright © 2011-2022 走看看