1003. Binary Tree Pruning
中文English
Given the head node root of a binary tree, where additionally every node's value is either a 0 or a 1.
Return this tree where every subtree (of the given tree) not containing a 1 has been removed.
(Recall that the subtree of a node X is X, plus every node that is a descendant of X.)
Example
Example 1:
Input: {1,#,0,0,1}
Output: {1,#,0,#,1}
Explanation:
Only the red nodes satisfy the property "every subtree not containing a 1".
The diagram on the right represents the answer.
Example 2:
Input: {1,0,1,0,0,0,1}
Output: {1,#,1,#,1}
Example 3:
Input: {1,1,0,1,1,0,1,0}
Output: {1,1,0,1,1,#,1}
Notice
The binary tree will have at most 100 nodes.
The value of each node will only be 0 or 1.
解法1:递归。
这题要注意加这2行:
root->left = leftNode;
root->right =rightNode;
这样就不用考虑指针的指针或指针的引用了。
代码如下:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: the root
* @return: the same tree where every subtree (of the given tree) not containing a 1 has been removed
*/
TreeNode * pruneTree(TreeNode * root) {
if (!root) return NULL;
TreeNode * leftNode = pruneTree(root->left);
TreeNode * rightNode = pruneTree(root->right);
root->left = leftNode;
root->right = rightNode;
if (!leftNode && !rightNode && root->val == 0) {
root = NULL;
}
return root;
}
};