全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

为什么二叉树的根结点常常是指向指针的指针?

发布时间:2023-10-11 04:38:21
发布人:xqq

一、为什么二叉树的根结点常常是指向指针的指针

因为在创造一颗树时,在申请根结点空间时,地址可能会发生变化,而这种变化是无法判断的,是系统自动发生的,单个指针就无法找到变化后的地址,所以 ,用指针的指针,找到变化后的地址。当然 如果你在创造一颗树前,就已经初始化分配了根结点的空间,那就不用指针的指针,直接用一个指针就行了。

它是一种C语言式的标准做法。

节点需要两重指针,一重是节点本身动态更改数据的需要,另一重是分配与操作堆内存数据的需要。

至于是不是一定要做成指针的指针形式,取决于节点数据是直接手动管理内存,这种可以指针的指针,效率较高。还是封装为某个结构的内部成员变量,开销略大一点,就只是指针的形式,好控制,使用方便。用智能指针的话,实际也是属于后者。

二叉树的建立中:

t=(BiTtree*)malloc(sizeof(BiTtree)); t->data=d; CreateBiTree(t->left,x); CreateBiTree(t->right,x);;

其中t=(tree*)malloc(sizeof(tree));

改变了指针的指向所以指针的指针,或者指针的引用

void CreateBiTree(BiTtree *&t,char x)

1

附上代码

#include

using namespace std;

struct BiTtree{

    char data;

    BiTtree *left,*right;

};

void CreateBiTree(BiTtree *&t,char x){

//在函数调用时用指针或者引用做参数,表示把变量的地址传递给子函数,

//但是子函数只能修改指针所指变量的值,并不能修改指针的指向。

//如果想要修改指针的指向,就要用指针的指针,或者指针的引用。

    char d;

    scanf(“%c”,&d);

    if(d==x){

       t=NULL;

    }

    else{

       t=(BiTtree*)malloc(sizeof(BiTtree));

       t->data=d;

       CreateBiTree(t->left,x);

       CreateBiTree(t->right,x);

    }

}

void printtree(BiTtree *t){

    if(t){

       printf(“%c “, t->data);

       printtree(t->left);

       printtree(t->right);

    }

}

int main(){

    BiTtree *t;

    CreateBiTree(t,’#’);

    printtree(t);

    return 0;

}

延伸阅读:

二、树

树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:

有且仅有一个特定的称为根(Root)的结点;当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…… 为什么二叉树的根结点常常是指向指针的指针Tn,其中每一个集合本身又是一棵树,并且称为根的子树。

此外,树的定义还需要强调以下两点:

n>0时根结点是少数的,不可能存在多个根结点,数据结构中的树只能有一个根结点。m>0时,子树的个数没有限制,但它们一定是互不相交的。
#it技术干货

相关文章

使用数组可以表示哪些数据结构?

使用数组可以表示哪些数据结构?

2023-10-11
计算机网络管理软件有哪些好用?

计算机网络管理软件有哪些好用?

2023-10-11
oa系统怎么注册?

oa系统怎么注册?

2023-10-11
用链表实现队列,在元素入列和出列时为什么需要判断链表是否为空?

用链表实现队列,在元素入列和出列时为什么需要判断链表是否为空?

2023-10-11

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取