声明:参考书籍《算法笔记》 作者:作者: 胡凡 / 曾磊 出版社: 机械工业出版社 ISBN: 9787111540090
二叉树其实是特殊的链表,是每个节点有一个数据域,两个指针。而链表只有一个数据,一个指针。关于二叉树可以参考博文二叉树就是这么简单。我们现在利用链表的只是来实现一个简单的二叉树模型
#include<stdio.h>
//创建node结构体
struct node{
int data; //存储数据
node* lchild; //创建左子树节点的指针
node* rchild; //创建右子树节点的指针
};
//创建新节点
node* newNode(int v)
{
node* Node = new node; //new一个新的节点
Node->data = v; //节点数据域值为 v
Node->lchild = Node->rchild = NULL; //左右子树的指针为NULL
return newNode; //返回节点地址
}
//查找函数,找到之后,就将newdata赋值给原来的x的值域
void search(node* root, int x, int newdata)
{
if(root == NULL) return; //查找到空树,返回
if(root->data == x) root->data = newdata; //找到我们需要的值了,将其重新赋值
search(root->lchild, x, newdata); //递归调用自己,往左子树查找
search(root->rchild, x, newdata); //递归调用自己,往右子树查找
}
//插入节点函数
void insert(node* &root, int x)
{
if(root == NULL) //如果时空树,说明是进行插入的地方
{
root = newNode(x); //新建节点,返回
return;
}
if(应该插入左子树) //应该插入到左子树(按实际要求填写条件)
{
insert(root->lchild, x);
}
else //应该插入到右子树
{
insert(root->rchild, x);
}
}
//二叉树的创建
node* creat(int data[], int n)
{
node* root = NULL; //头结点开始赋值为NULL
for(int i=0; i<n; i++)
{
insert(root, data[i]); //不断插入新的节点,并给其赋值
}
return root;
}