leetcode 623 Add One Row to Tree

来源:互联网 发布:知豆电动汽车加盟代理 编辑:程序博客网 时间:2024/05/20 18:41

1.题目

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.
给一棵二叉树的根结点root,值v,深度d。你需要给这棵树添加一层深度为d值为v的节点。
注意根结点深度为1
添加规则:
对于深度为d-1的非空节点N,为该节点创建两个值为v的左右子节点newleft,newright,然后将N原本的左子树根结点oldleft作为N的新左节点的左节点,N原本的右子树根结点oldright作为N的新右节点的右节点。
如果d=1,那么创建一个值为v的节点作为整棵树的根结点,原来的根结点作为新的根结点的左子树根结点。

Example 1:
Input:
A binary tree as following:

     4   /   \  2     6 / \   / 3   1 5   

v = 1 d = 2

Output:

   4  / \ 1   1/     \2     6/ \   / 3  1  5   

Example 2:
Input:
A binary tree as following:

  4 /   2    / \   3  1    

v = 1 d = 3

Output:

   4  /    2/ \    1  1/   \  3    1

Note:
The given d is in range [1, maximum depth of the given tree + 1].
The given binary tree has at least one tree node.

2.分析

考察树的广度优先遍历。用queue实现。

3.代码

class Solution {public:    TreeNode* addOneRow(TreeNode* root, int v, int d) {        if (d == 1)        {            TreeNode* node = new TreeNode(v);            node->left = root;            root = node;            return root;        }        queue<TreeNode*> nodes;        nodes.push(root);        int level = 1;        while (!nodes.empty()) {            int size = nodes.size();            for (int i = 0; i < size; i++) {                TreeNode* tmp = nodes.front();                nodes.pop();                if (level == d - 1) {                    TreeNode* newleft = new TreeNode(v);                    TreeNode* newright = new TreeNode(v);                    newleft->left = tmp->left;                    newright->right = tmp->right;                    tmp->left = newleft;                    tmp->right = newright;                }                else {                    if (tmp->left)                        nodes.push(tmp->left);                    if (tmp->right)                        nodes.push(tmp->right);                }            }            level += 1;        }        return root;    }};
原创粉丝点击