c - 为什么可以在函数中更改结构的内容
问题描述
这是一个惰性X
化为a的操作BinTree
,让我困惑的是为什么BST->Left
在step①中不能改变,但是在step②或ster③中可以改变,我认为这三个步骤都在函数中,为什么会有区别在他们之间,如果有人可以帮助我,我将不胜感激!
BinTree Insert( BinTree BST, ElementType X ){
if(!BST){
BST=(BinTree)malloc(sizeof(struct TNode));
BST->Data=X;①
BST->Left=NULL;
BST->Right=NULL;
}else{
if(X<BST->Data){
**BST->Left=**Insert(BST->Left,X);②
}else{
**BST->Right=**Insert(BST->Right,X);③
}
return BST;
}
解决方案
该函数处理指向二叉搜索树根节点的指针的副本。更改此语句中的副本
BST=(BinTree)malloc(sizeof(struct TNode));
不影响作为参数传递给函数的原始指针。您必须将函数返回的指针分配给指向二叉搜索树根节点的原始指针,例如
BinTree root = NULL;
root = Insert( root, X );
在这些陈述中
BST->Left = Insert(BST->Left,X);
BST->Right = Insert(BST->Right,X);
您正在分配数据,通过指针 BST 通过引用传递给 thj 函数的成员 Left 和 Right。
推荐阅读
- asp.net - 可以在 ASP.Net Core 3.x 应用程序中使用“旧”ASP.Net SignalR 吗?
- javascript - Aframe 声音循环间隙
- c# - 获取不同服务的环境变量
- linux - -s 命令显示什么?为什么它会随着-h而改变?
- pdf - Pandoc Markdown to Latex PDF:表格合并单行中的行?
- opencart - Opencart 导出/导入工具
- flutter - 等待 Navigator.pop 忽略 Navigator.pushReplacement
- python - 无法在 Seaborn 箱线图中使用科学记数法
- excel - vba,基于列标题的总和
- sql-server - sql server 中的 RAND() 函数