C 二叉樹 遍歷

2021-08-31 12:22:18 字數 3424 閱讀 9856

[b][size=large][align=center]二叉樹--遍歷[/align][/size][/b]

二叉樹的遍歷:1,遞迴遍歷,效率低

2.非遞迴遍歷

本文實現用堆疊儲存二叉樹的根節點,進行非遞迴遍歷。

//****************************************==//

//程式目的:1.建立二叉樹 //

// 2.遞迴遍歷二叉樹 //

// 3.非遞迴遍歷二叉樹 //

// 4.非遞迴遍歷用棧儲存根位址 //

// 5.用鍊錶實現棧 //

//written by hewei //

//2011 06 01 //

//****************************************==//

#include

using namespace std;

#define max 20

//------------------------------------------//

//------------樹節點的宣告------------------//

//------------------------------------------//

struct tree

;typedef struct tree nodetree;

typedef nodetree *b_tree;

//-----------------------------------------//

//--------堆疊節點宣告儲存樹節點-----------//

//-----------------------------------------//

struct list

;typedef struct list node;

typedef node *link;

//-----------------------------------------//

//-----------非遞迴法二叉樹節點插入--------//

//-----------------------------------------//

b_tree insert_tree(int data,b_tree root)

else

else

parentnode = currentnode; //父節點

}else //右節點

else

parentnode = currentnode; //父節點}}

//找到當前插入的位置後插入資料

if(data <= parentnode->data)

else

parentnode->right = new;

}return root;

}//-----------------------------------------//

//------------二叉樹的建立-----------------//

//-----------------------------------------//

b_tree create_tree(int len,int *parray)

}//----------------------------------------//

//-------------鍊錶建立堆疊---------------//

//----------------------------------------//

link create_list()

b_tree pop_list(link & head) //出棧,這裡用來引用,引用如何應用

else

return pop_treenode;

}link push_list(link head,b_tree new_node) //入棧

else

return head;

}//----------------------------------------//

//---------非遞迴前序遍歷二叉樹-----------//

//----------------------------------------//

void persearch(b_tree root)

if(newlist != null) //取出堆疊中的儲存值進行輸出}}

//----------------------------------------//

//-----------儲存陣列元素-----------------//

//----------------------------------------//

void store_data(int len,int *parray)

}//----------------------------------------//

//--------------主函式--------------------//

//----------------------------------------//

int main(void)

在編寫pop_list()函式利用了引用,需要注意一下幾點:

1.push堆疊時要從head處push,而不是從rear處push,這才是先進後出的理念;若從rear處push則是佇列的理念。

2.pop堆疊時也要從head處pop,無論堆疊還是佇列都要從head處pop,這樣便於操作。

3.pop**

pointer = head;

head = head->pnext;

free(pointer);

4.push**

head處插入:

pointer = head;

head = newnode;

newnode->pnext = pointer;

rear處插入:

pointer = head;

while(pointer != null)

pointer->pnext = newnode;

二叉樹的非遞迴遍歷:

while迴圈ree節點,知道節點為空,且棧為空

C 二叉樹的表達 遍歷二叉樹

樹結構是一種資料結構,它由節點 node 以及連節點的邊 edge 構成。如果一棵樹具有乙個叫為根 root 的特殊節點,那麼這棵樹稱作有根數 rooted tree 樹結構有如下的定義 二叉樹的定義 擁有乙個根節點,所有節點的子節點不超過2的樹稱為二叉樹。include include using...

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...

二叉樹遍歷

二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...