《算法笔记》第9章 提高篇(2)---数据结构专题 9.1 树与二叉树

9.1.1 树的定义与性质

9.1.2二叉树的递归定义:

在这里插入图片描述

在这里插入图片描述

9.1.3二叉树的存储结构与基本操作

1.二叉树的存储结构:

在这里插入图片描述

二叉树的结点结构:

struct node
{
    typename data;  //数据域
    node *lchild;    //指向左子树的根结点的指针
    node *rchild;     //指向右子树的根结点的指针
};


在这里插入图片描述

node *root=NULL;

在这里插入图片描述

创建新的二叉树结点

//生成一个新结点,v为权值
node *newNode(int v)
{
    node *Node=new node;    //申请一个node型变量的地址空间
    Node->data=v;    //结点权值为V
    Node->lchild=Node->rchild=NULL;   //初始状态下没有左右孩子
    return Node;    //返回新建结点的地址
}

二叉树结点的查找,修改:

在这里插入图片描述

void search(node *root, int x, int newdata)   //查找到数字x然后将其改为newdata
{
    if(root==NULL)
        return ;   //死树,到达递归边界
    if(root->data==x)   //找到数字x,则将其改为newdata
        root->data=newdata;
    search(root->lchild,x,newdata);   //往左子树查找
    search(root->rchild,x,newdata);     //往右子树查找
}

二叉树结点的插入:

在这里插入图片描述

//insert函数将在二叉树中插入一个数据域为x的新结点
//注意root用引用的方式,否则不会成功

void insert(node *&root,int x)
{
    if(root==NULL)
    {
        root=newNode(x);
        return ;
    }
    if(由二叉树的性质,x应该插在左子树)
        insert(root->lchild,x);
    else
        insert(root->rchild,x);
}

关于指针的应用和指针的介绍

在这里插入图片描述

二叉树的创建:

在这里插入图片描述

//二叉树的建立
node *create(int data[],int n)
{
    node *root=NULL;  //新建空根结点root
    for(int i=0; i<n; i++)
        insert(root,data[i]);
    return root;   //返回根结点
}

二叉树存储结构图示:

在这里插入图片描述

完全二叉树的存储结构:

在这里插入图片描述
总结:*root=NULL表示root所指向的内容为空,而root=NULL表示root的这个结点的左右子树为空,所以root表示为NULL

关于函数调用时 参数的* 或者&的使用

#include<iostream>
using namespace std;

/*
void fun1(int &x)      //参数为&类型,相当于直接对该地址的值进行修改,从而改变main函数中x的值
{
    x=53;
}
int main()
{
    int x=223;
    fun1(x);               直接调用x
    cout << x;
}*/


void fun2(int *x)   //形参为指针,使用一个指针来接受x的地址
{
    *x=443;         //使用*,所以使用的时候必须是指针的方式
}

int main()
{
    int x=233;
    fun2(&x);      //调用的是地址
    cout << x;
}



在这里插入图片描述

类似于图中走迷宫,只要遇到岔路口就继续深入下去,一直到遍历完所有的岔路口,不碰到死胡同不回头

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值