写点什么

[Day32-02]-[二叉树] 在二叉树中增加一行

作者:方勇(gopher)
  • 2022 年 5 月 01 日
  • 本文字数:828 字

    阅读完需:约 3 分钟

623. 在二叉树中增加一行

二叉树的根 root 和两个整数 val 和 depth ,在给定的深度 depth 处添加一个值为 val 的节点行。

注意,根节点 root 位于深度 1 。

加法规则如下:

  • 给定整数 depth,对于深度为 depth - 1 的每个非空树节点 cur ,创建两个值为 val 的树节点作为 cur 的左子树根和右子树根。

  • cur 原来的左子树应该是新的左子树根的左子树。

  • cur 原来的右子树应该是新的右子树根的右子树。

  • 如果 depth == 1 意味着 depth - 1 根本没有深度,那么创建一个树节点,值 val 作为整个原始树的新根,而原始树就是新根的左子树。

 

示例 1:



输入: root = [4,2,6,3,1,5], val = 1, depth = 2输出: [4,1,1,2,null,null,6,3,1,5]
复制代码

示例 2:



输入: root = [4,2,null,3,1], val = 1, depth = 3输出:  [4,2,null,1,1,3,null,null,1]
复制代码

题解:

func TestAddOneRow(t *testing.T) {	root := &TreeNode{		Val: 1,		Left: &TreeNode{			Val: 2,			Left: &TreeNode{				Val: 4,			},		},		Right: &TreeNode{			Val: 3,		},	}	// 题解:
var depth = 3 // 插入的层级 var val = 5 // 新节点的val var dfs func(root *TreeNode, curr int) // 递归 DLR dfs = func(root *TreeNode, curr int) { if root == nil { // 递归终止条件 return } if curr == depth-1 { l := root.Left // 临时存储左节点 r := root.Right // 临时存储右节点 root.Left = &TreeNode{ // 新节点 Val: val, Left: l, } root.Right = &TreeNode{ // 新节点 Val: val, Right: r, } } dfs(root.Left, curr+1) dfs(root.Right, curr+1) }
solution := func(root *TreeNode) *TreeNode { if depth == 1 { // 特殊兼容depth=1的情况 return &TreeNode{ Val: val, Left: root, } } dfs(root, 1) return root }
t.Log(solution(root))}
复制代码


用户头像

Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入

我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!

评论

发布
暂无评论
[Day32-02]-[二叉树]在二叉树中增加一行_LeetCode_方勇(gopher)_InfoQ写作社区