----"c 语言的精华在于指针的灵活性。学好指针的目的在于尽可能少的使用指针。"

  在敲binary search tree(二叉查找树),遇到了问题。在删除的时候,如果删除的是root节点,那么要改变根节点的地址,在实现时会非常卵痛。后来发现有一种好的方法就是使用二级指针,这样可以轻松改变root节点的地址。我只需要改变指向root节点的指针的指针中的所存的地址就好了。为了搞明白二级指针,做了一下实验:

typedef struct Tree_Node
{
int val;
Tree_Node *left, *right, *parent;
Tree_Node(int x)
{
val = x;
left = NULL;
right = NULL;
parent = NULL;
}
}Node, *PNode;
int main()
{
Node x();
cout<<&x<<endl;
Node *p = &x;
cout<<&p<<" "<<p<<" "<<p->val<<endl;//&p : p自己的地址 p : 指向(x)的地址 p : 指向地址处(x)val值
Node **pp = &p;
cout<<&pp<<" "<<pp<< " "<<(*pp)<<" "<<(*pp)->val<<endl;//&pp : pp自己的地址 pp : 指向(p)的地址 *pp : 取出pp所存(p)地址处的值(&x)
//可以看到 PNode 实际上就是一个 Node*, 那么这里pnode就是一个(Node**)也就是一个指向p(一级指针)的二级指针
PNode *pnode = &p;
cout<<&pnode<<" "<<pnode<< " "<<(*pnode)<<" "<<(*pnode)->val<<endl;
return ;
}

  最后完成了搜索二叉树的一些基本操作。附上gitlab仓库链接:git@gitlab.com:luntai/algorithm.git

最新文章

  1. js解析网址获取需要的数据
  2. 项目管理-Kick OFF 简称KO
  3. Unity3D UNet网络组件详解
  4. MySQL中如何插入反斜杠,反斜杠被吃掉,反斜杠转义
  5. 使用java 程序创建格式为utf-8文件的方法(写入和读取json文件)
  6. Maven提高篇系列之(一)——多模块 vs 继承
  7. CoreLocation MKMapView 地图
  8. 蓝桥杯--Quadratic Equation
  9. 队列(链式存储)C++模板实现
  10. Cocos2d-x 3.0 beta 中加入附加项目,解决无法打开包括文件:“extensions/ExtensionMacros.h”: No such file or directory”
  11. Bluetooth LE(低功耗蓝牙) - 第二部分
  12. git 基本命令 (常用)
  13. Hot-Bar 軟板設計注意事項
  14. PO订单审批通过API
  15. Leetcode | 组目录
  16. 深入理解Java并发synchronized同步化的代码块不是this对象时的操作
  17. 20170907VS中EF模型文件.edmx文件上下级关系丢失问题
  18. [翻译].NET Core 3 Preview1和Windows桌面框架开源
  19. UR5 改造
  20. 【分区助手】如何扩大C盘容量?

热门文章

  1. importdata-- matlab
  2. ndk编译libpcap 1.7.4(最终解决方法)
  3. 51nod1128 正整数分组V2
  4. CSS中具有继承性的属性:
  5. 转载 - PowerDesigner(CDM—PDM—SQL脚本的转换流程)
  6. POJ 1970 The Game
  7. Ubuntu 16.04设置开机关机时显示命令详细信息不显示进度条Logo
  8. 一个性能较好的jvm參数配置以及jvm的简单介绍
  9. C#邮件发送(含附件)
  10. C 基础 全局变量