Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

在二叉树中增加一行 #151

Open
yankewei opened this issue Aug 6, 2022 · 1 comment
Open

在二叉树中增加一行 #151

yankewei opened this issue Aug 6, 2022 · 1 comment
Labels
广度优先搜索 题目包含广度优先搜索解法 题目类型为树结构 简单 题目难度为简单

Comments

@yankewei
Copy link
Owner

yankewei commented Aug 6, 2022

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

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

加法规则如下:

  • 给定整数 depth,对于深度为 depth - 1 的每个非空树节点 cur ,创建两个值为 val 的树节点作为 cur 的左子树根和右子树根。
  • cur 原来的左子树应该是新的左子树根的左子树。
  • cur 原来的右子树应该是新的右子树根的右子树。
  • 如果 depth == 1 意味着 depth - 1 根本没有深度,那么创建一个树节点,值 val 作为整个原始树的新根,而原始树就是新根的左子树。

示例 1:

示例1

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

示例 2:

示例2

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

提示:

  • 节点数在 [1, 104] 范围内
  • 树的深度在 [1, 104]范围内
  • -100 <= Node.val <= 100
  • -105 <= val <= 105
  • 1 <= depth <= the depth of tree + 1

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-one-row-to-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

@yankewei yankewei added 简单 题目难度为简单 广度优先搜索 题目包含广度优先搜索解法 题目类型为树结构 labels Aug 6, 2022
@yankewei
Copy link
Owner Author

yankewei commented Aug 6, 2022

比较简单的树遍历,可以借助 php 的匿名函数递归
yankewei/blog#8

/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     public $val = null;
 *     public $left = null;
 *     public $right = null;
 *     function __construct($val = 0, $left = null, $right = null) {
 *         $this->val = $val;
 *         $this->left = $left;
 *         $this->right = $right;
 *     }
 * }
 */
class Solution {

    /**
     * @param TreeNode $root
     * @param Integer $val
     * @param Integer $depth
     * @return TreeNode
     */
    function addOneRow($root, $val, $depth) {
        if ($depth === 1) {
            return new TreeNode($val, $root, null);
        }

        $dfs = function (?TreeNode $root, int $level) use (&$dfs, $val, $depth){
            if ($level === $depth-1) {
                $root->left = new TreeNode($val, $root->left, null);
                $root->right = new TreeNode($val, null, $root->right);
                return;
            }

            if ($root->left !== null) {
                $dfs($root->left, $level + 1);
            }

            if ($root->right !== null) {
                $dfs($root->right, $level + 1);
            }
        };

        $dfs($root, 1); // level 设置为1,为了获取正确的节点

        return $root;
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
广度优先搜索 题目包含广度优先搜索解法 题目类型为树结构 简单 题目难度为简单
Projects
None yet
Development

No branches or pull requests

1 participant