623.在二叉树中增加一行

这篇博客介绍了如何在给定深度的二叉树中插入新的一行节点。根据深度d,对于深度d-1的每个非空节点,创建两个新节点作为其左、右子树,并将原左、右子树分别连接到新节点上。当d为1时,创建新根节点。示例展示了在不同深度插入节点后的二叉树结构。
摘要由CSDN通过智能技术生成

学习目标:

623.在二叉树中增加一行


学习内容:

623:在二叉树中增加一行
给定一个二叉树,根节点为第1层,深度为 1。在其第 d 层追加一行值为 v 的节点。
添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左子树和右子树。
将 N 原先的左子树,连接为新节点 v 的左子树;将 N 原先的右子树,连接为新节点 v 的右子树。
如果 d 的值为 1,深度 d - 1 不存在,则创建一个新的根节点 v,原先的整棵树将作为 v 的左子树。

示例 1:

输入: 
二叉树如下所示:
             4
           /   \
          2     6
         / \   / 
        3   1 5   
v = 1
d = 2
  输出: 
             4
            / \
           1   1
          /     \
         2       6
        / \     / 
       3   1   5   
       
示例 2:
输入: 
二叉树如下所示:
            4
           /   
          2    
         / \   
        3   1    
v = 1
d = 3
输出: 
            4
           /   
          2
         / \    
        1   1
       /     \  
      3       1
注意:
输入的深度值 d 的范围是:[1,二叉树最大深度 + 1]。
输入的二叉树至少有一个节点。

学习时间:

2020年12月


学习产出:

package 在二叉树中增加一行;

/**
 * 
 * @ClassName: Solution.java
 * @Description: 
 * 给定一个二叉树,根节点为第1层,深度为 1。在其第 d 层追加一行值为 v 的节点。
 * 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左子树和右子树。
 * 将 N 原先的左子树,连接为新节点 v 的左子树;将 N 原先的右子树,连接为新节点 v 的右子树。
 * 如果 d 的值为 1,深度 d - 1 不存在,则创建一个新的根节点 v,原先的整棵树将作为 v 的左子树。
 *
 * @version: v1.0.0
 * @author: 童梦君
 * @date: 2020年12月15日 下午8:03:33 
 *
 * Modification History:
 Modification History:
 * Date            Author          Version            Description
 *----------------------------------------------------------------*
 * 2020年12月15日   童梦君          v1.0.0               修改原因
 */
public class Solution {
	public TreeNode addOneRow(TreeNode root, int v, int d) {
		if(d==1) {
			TreeNode newroot = new TreeNode(v);
			newroot.left=root;
			return newroot;
		}
		return RootInsert(root,1,v,d);
	}
	public TreeNode RootInsert(TreeNode root,int level,int v,int d) {
		//递归终止
		if(root==null)
			return null;
		if(level==d-1) {
			TreeNode left = root.left;//记录当前结点的左子树
			TreeNode right = root.right;//记录当前结点的右子树
			TreeNode newleft = new TreeNode(v);//申请两个新节点用作当前结点的左右子树
			TreeNode newright = new TreeNode(v);
			newleft.left=left;//将当前结点的左子树给新节点
			newright.right=right;//将当前结点的右子树给新节点
			root.left=newleft;//将新结点指向当前结点的左子树
			root.right=newright;//将新结点指向当前结点的右子树
			return root;
		}
		//下探到下一层
		root.left=RootInsert(root.left,level+1,v,d);
		root.right=RootInsert(root.right,level+1,v,d);
		return root;
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值