二叉树剪枝,将不包含值为1的枝剪掉。运用递归,不断迭代到最低一层查看是否满足条件即可。
编程的时候需要注意,如果用指针传递时,由于要修改原来二叉树的值,因此在传递节点的时候要用指向指针的指针(二重指针),当使用引用的时候则没有这种问题。
二重指针的用法可参考:https://blog.csdn.net/xll_bit/article/details/103496161
class Solution {
public:
/*
// pointer to pointer
bool containOne(TreeNode** root,bool is){
if(!(*root)){
is = false;
return false;
}
if((*root)->val == 1)
is = true;
if(containOne(&((*root)->left),false))
is = true;
if(containOne(&((*root)->right),false))
is = true;
if(!is){
cout<<(*root)->val;
*root = NULL;
}
return is;
}
TreeNode* pruneTree(TreeNode* root) {
if(!root)
return root;
containOne(&root,false);
return root;
}
*/
// reference
bool containOne(TreeNode*& root,bool is){
if(!root){
is = false;
return false;
}
if(root->val == 1)
is = true;
if(containOne(root->left,false))
is = true;
if(containOne(root->right,false))
is = true;
if(!is){
root = NULL;
}
return is;
}
TreeNode* pruneTree(TreeNode* root) {
if(!root)
return root;
containOne(root,false);
return root;
}
};