标签:
----"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(1); 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 0; }
最后完成了搜索二叉树的一些基本操作。附上gitlab仓库链接:git@gitlab.com:luntai/algorithm.git
标签:
原文地址:http://www.cnblogs.com/luntai/p/5398202.html