演算法的樂趣c/c++ —— 2.2 二叉樹的實現
阿新 • • 發佈:2018-12-26
宣告:參考書籍《演算法筆記》 作者:作者: 胡凡 / 曾磊 出版社: 機械工業出版社 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; }