二叉樹建立與遍歷

2021-09-10 08:06:37 字數 1698 閱讀 9515

#####節點定義:

class binnode 

binnode(char data2):data(data2)

binnode(char data2, binnode* parent2):data(data2)

void insertasleft(char data)

void insertasright( char data)

};

#####樹的定義:

class bintree 

binnode* getroot() //獲取根節點

void creatbtreebycengci(string arr);//層次遍歷產生一顆樹,參考層次遍歷

void creatbtreebystring(string str) ;//通過乙個字串建立一棵樹,呼叫creatbtree

binnode* creatbtree(int& pos);//通過先序遍歷產生一棵樹,使用遞迴

void preorder(binnode* t) ;//先序遍歷以t為根節點的子樹,遞迴

void inorder(binnode* t) ;//中序遍歷以t為根節點的子樹,遞迴

void postorder(binnode* t) ;//後序遍歷以t為根節點的字數,遞迴

void preorderbystack(binnode* t);//先序遍歷以t為根節點的子樹,非遞迴

void inorderbystack(binnode* t);//中序遍歷以t為根節點的子樹,非遞迴

void cengcibyqueue(binnode* t);//層次遍歷,利用佇列

}

######以下是各種方法的實現:

首先是通過乙個字串先序遍歷建立一顆樹

void creatbtreebystring(string str) 

binnode* creatbtree(int& pos)

return t;

}

先序遍歷、中序遍歷、後序遍歷的遞迴版本,此處無傳如visit函式,只是訪問節點的資料並輸出:

void preorder(binnode* t) 

void inorder(binnode* t)

void postorder(binnode* t)

先序遍歷的非遞迴版本(使用棧):

void preorderbystack(binnode* t) 

if (st.empty()) break;//所有右孩子都訪問完了,結束。棧底是最上面的右孩子(它最先入棧)

t = st.top(); st.pop();//pop出棧頂的右孩子,對其進行遍歷

}}

中序遍歷的非遞迴版本(使用棧):

void inorderbystack(binnode* t) 

if (!st.empty())

else

} }

層次遍歷(使用佇列):

void cengcibyqueue(binnode* t) 

}};

void creatbtreebycengci(string arr) 

}

二叉樹建立與遍歷

二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱為 左子樹 和 右子樹 二叉樹的每個節點最多只能右兩棵子樹,子樹有左右之分,次序不能顛倒。除了葉結點外每乙個結點都有左右子葉且葉子結點都處在最底層的二叉樹。假設二叉樹的高度為k,除第k層外,其他各層的節點數都達到最大個數。也就是第一層到第k 1層為...

二叉樹的建立與遍歷 二叉樹遍歷模板)

初學二叉樹,感覺之前鍊錶掌握不熟練導致接受有點難,現在做一些總結。本題其實就是根據給出的前序遍歷 包括空子樹 寫出相應的前序 中序和後序遍歷。廢話不多說,先看看題目 description 下面給出了教材中演算法6.4所示的演算法。status createbitree bitree t retur...

二叉樹建立 遍歷

include include include include using namespace std typedef struct node char ch struct node lchild,rchild bitnode,bitree int treenum 0 總結點數 void creat...