为什么二叉树的根结点常常是指向指针的指针?
一、为什么二叉树的根结点常常是指向指针的指针
因为在创造一颗树时,在申请根结点空间时,地址可能会发生变化,而这种变化是无法判断的,是系统自动发生的,单个指针就无法找到变化后的地址,所以 ,用指针的指针,找到变化后的地址。当然 如果你在创造一颗树前,就已经初始化分配了根结点的空间,那就不用指针的指针,直接用一个指针就行了。
它是一种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时,子树的个数没有限制,但它们一定是互不相交的。相关推荐HOT
更多>>线性表中的随机存取(读写)是什么意思?
一、线性表中的随机存取(读写)是什么意思线性表是数据结构中的一种基本数据类型,它包含了一组有序的数据元素,每个元素有一个少数的前驱元素和...详情>>
2023-10-14 23:06:05为什么MySQL的IN操作在大于3个操作数时不用索引?
一、MySQL的IN操作在大于3个操作数时不用索引的原因1、索引数据结构的限制MySQL使用B树或哈希等索引数据结构来加速查询,但这些数据结构都有其...详情>>
2023-10-14 22:01:14STL中为什么遍历map比遍历list慢?
一、STL中遍历map比遍历list慢的原因1、内存布局不同 map和list的内存布局不同,map是一种基于红黑树实现的关联容器,其数据结构是一棵二叉搜索...详情>>
2023-10-14 18:50:17先根遍历和先序遍历的区别?
一、先根遍历和先序遍历先根遍历和先序遍历是同一个概念,只是叫法不同,也叫前序遍历,是一种节点遍历算法,指的是按照“根节点->左子树->右子...详情>>
2023-10-14 17:31:25热门推荐
完全二叉树为什么非常适合顺序存储结构?
沸线性表中的随机存取(读写)是什么意思?
热有哪些javascript数据结构相关库用来描述队列、树、图?
热为什么MySQL的IN操作在大于3个操作数时不用索引?
新Java中遍历数据结构Enumeration和Iterator相比有什么不同?
数据结构里面pnext与next有什么区别?
数组与集合有什么不同?
ASPICE是什么?
数据结构中HashMap与HashTable的区别是什么?
STL中为什么遍历map比遍历list慢?
什么是tpm管理?
什么叫精益管理?
先根遍历和先序遍历的区别?
HashMap为什么不用B+树来替换红黑树?