算法的乐趣c/c++ —— 2.2 二叉树的实现

声明:参考书籍《算法笔记》 作者:作者: 胡凡 / 曾磊  出版社: 机械工业出版社   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;
}

猜你喜欢

转载自blog.csdn.net/lpp5406813053/article/details/85060488