關於二叉樹的建立 遍歷等問題

2021-08-08 12:07:01 字數 1962 閱讀 6109

樹是一種非線性結構,其中以二叉樹應用最為廣泛,比如說優化演算法的堆排就是以二叉樹為基礎;所以先來從二叉樹的建立、遍歷總結起;定義二叉樹 以及節點的空間申請  用遍歷結果建立二叉樹 計算葉子節點個數、節點個數、各種分支個數等
定義二叉樹 以及節點的空間申請

typedef

char elemtype;

typedef

struct node

bttree;

bttree *buynode()

建立二叉樹 (首先以一種簡單的方法建立二叉樹:假設二叉樹的左右孩子為null時用』#』來代替)

bttree* creat_tree1()

return s;

}

當然這種方法比較簡單,接下來先總結二叉樹的遍歷然後再總結通過不同的遍歷順序來建立二叉樹

3. 二叉樹的遍歷(覺得老師上課講的二叉樹例子特別有代表性)

(1)、先序遍歷(結果為:abcdefgh)

void pre_order(bttree *r)          

(2)、中序遍歷(結果為:cbedfagh )

void in_order(bttree *r)

(3)、後序遍歷(結果為:cefdbhga)

void las_order(bttree *r)

已知兩種不同的遍歷順序建立二叉樹

(1)已知先序和中序來建立二叉樹

int find(char *is,int n,elemtype x)//find函式的目的是比較資料是否在兩種遍歷次序中都有出現並返回中序中的位置

return -1;

} bttree * cre_pi(char *ps,char *is,int n)

return s;

}bttree * create_pi(char *ps,char *is)

else

}

(2)已知中序和後序來建立二叉樹

bttree * cre_il(char *is,char *ls,int n)

return s;

}bttree * creat_il(char *is,char *ls)

}

在建立二叉樹時,只考慮了一種沒有重複資料的二叉樹建立方法,如果有重複資料,則可能建立出錯誤的二叉樹;關於這個問題,還有待思考。。。

二叉樹的某些常用函式

(1)二叉樹的節點個數

int size(bttree *ptr)

(2)二叉樹的葉子節點個數

int size_leaf(bttree *ptr)

(3)二叉樹的深度

int depth(bttree *ptr)

} (4)判斷是否為滿二叉樹

bool full_binarytree(bttree *ptr)

(5)求樹的雙分支節點個數

int size_treebrch(bttree *ptr)

} (6)求二叉樹的單分支節點個數

int size_onebrch(bttree *ptr)

}(7)求二叉樹的左單分支節點個數

int size_onelbrch(bttree *ptr)

}(8)求二叉樹的右單分支節點個數

int size_onerbrch(bttree *ptr)

}

在利用中序先序或者中序後序(先序後序是沒有辦法建立二叉樹的,因為沒有辦法確定左右子樹從**分)來建立二叉樹時,除過遞迴的方法 用棧也可以實現 這個以後再總結

二叉樹的建立 遍歷1 建立二叉樹

談二叉樹,如果二叉樹都沒有正確的建立出來,那豈不是紙上談兵!括號表示式 表示方法 1.括號 括號內的東西是括號前的元素的孩子 2.逗號 逗號是為了區分左右孩子 演算法分析 給出乙個如上的括號表示式 a b d g e,f 再利用棧這個資料結構,分析一下 掃瞄整個括號表示的字串,這個字串中只有四種字元...

二叉樹的建立 遍歷等基本操作

話不多說,直接上 二叉樹建構函式,對屬性元素進行初始化的操作 binarytree binarytree 二叉樹的析構函式,不進行實現 binarytree binarytree 二叉樹的插入操作 到底二叉樹的插入應該如何進行 還是使用上述的佇列方法進行實現 void binarytree crea...

二叉樹建立 遍歷

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