1. 程式人生 > >演算法的樂趣c/c++ —— 2.2 二叉樹的實現

演算法的樂趣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;
}