文章目录
《算法笔记》9.1小节——数据结构专题(2)->树与二叉树
9.1.1-树的定义与性质
数据结构中,把树根抽象为根结点,树叶抽象为叶子结点,把茎干和树枝统一抽象为边。
性质:
9.1.2-二叉树的递归定义
9.1.3-二叉树的存储结构与基本操作
1.二叉树的存储结构
//二叉树的存储结构
struct node{
typename data;//数据域
node *lchild;//指向左子树根结点的指针
node *rchild;//指向右子树根结点的指针
};
//新建结点
node *newNode(int v){
node *Node = new node;//申请一个node型变量的地址空间
Node->data = v;//结点权值为v
Node->lchild = Node->rchild = NULL;//初始状态下没有左右孩子
return Node;//返回新建结点的地址
}
2.二叉树结点的查找、修改
void search(node *root,int x,int newdata){
if(root == NULL){
return;//空树,死胡同(递归边界)
}
if(root->data == x){//找到数据域为x的结点,把它修改成newdata
root->data = newdata;
}
search(root->lchild,x,newdata);//往左子树搜索x(递归式)
search(root->rchild,x,newdata);//往右子树搜索x(递归式)
}
3.二叉树结点的插入
void insert(node *&root,int x){
if(root == NULL){//空树说明查找失败
root = newNode(x);
return;
}
if(由二叉树的性质,x应该插在左子树){
insert(root->lchild,x);//往左子树搜索(递归式)
}
else{
insert(root->rchild,x);//往右子树搜索(递归式)
}
}
4.二叉树的创建
node *Create(int data[],int n){
node *root = NULL;
for(int i = 0;i < n;i++){
insert(root,data[i]);
}
return root;
}
5.二叉树存储结构图示
Codeup习题
链接: http://codeup.cn/contest.php?cid=100000610
无
二叉树小结
二叉树的存储结构以及在该结构上的操作,具体可见博客:https://blog.csdn.net/qq_34767784/article/details/95781059