概述
参考 https://blog.csdn.net/c991262331/article/details/83274525
在做一道经典的深度优先搜索二叉树的题目时遇到一个问题,即C++中将结构体指针作为参数传递时,并不会改变实参的值!原因是当结构体指针传递给函数时,会拷贝一份指针的值,但是函数内部的指针和函数外部的指针并不是指向同一个引用的,所以才会使得函数里面改变了,但是函数外部无变化,解决方案是在传参的时候,将结构体指针的引用传递过去。
class Solution {
public:
//算法:
//对于某节点x,(1)若p和q分别在x的左子树和右子树中,则满足该条件的最深的节点为p,q的最近公共祖先;
//(2)若x本身是p或q,并且另一节点在x的左子树或右子树中,则x是p,q的最近公共祖先
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
TreeNode* res=0;
dfs(root,p,q,res);
return res;
}
//结构体指针做参数不会改变形参的值!需要传引用
//开始我传的是TreeNode* res
bool dfs(TreeNode* node,TreeNode* p,TreeNode* q,TreeNode*& res){
if(node==NULL){
return false;
}
//中序遍历.需要先确定左右子树中是否含p,q,再考虑根节点的情况
//深搜至树的最底层,直至node==NULL返回false,从最深处叶子节点开始更新。则初始lson/rson为false
bool lson = dfs(node->left,p,q,res);
bool rson = dfs(node->right,p,q,res);
//满足条件则记录结果
if((lson&&rson)||((node==p||node==q)&&(lson||rson))){
res = node;
}
//若当前遍历到的节点是p或q,或者之前的递归过程已使lson/rson为真(即p或q已找到),返回true
return node==p||node==q||lson||rson;
}
};
最后
以上就是风趣棒球为你收集整理的C++结构体指针做函数参数不会改变实参的值的全部内容,希望文章能够帮你解决C++结构体指针做函数参数不会改变实参的值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复