二叉樹的基本操作

2021-08-20 12:30:31 字數 2261 閱讀 6658

二叉樹結構體定義以及函式宣告:

typedef int btdatatype;

typedef struct binarytreenode

btnode;

btnode* buybtnode(btdatatype x);//建立樹的節點

// 建立二叉樹

btnode* createbtree(btdatatype* a, size_t* pindex, btdatatype invalid);

void btreeprevorder(btnode* root);//先序遍歷

void btreeinorder(btnode* root);//中序遍歷

void btreepostorder(btnode* root);//後序遍歷

size_t btreesize(btnode* root);//樹的節點個數

size_t btreeleafsize(btnode* root);//葉節點個數

size_t btreeklevelsize(btnode* root, size_t k);//第k層節點個數

size_t btreedepth(btnode* root);//深度

btnode* btreefind(btnode* root, btdatatype x);//查詢

建立樹的節點:

btnode* buybtnode(btdatatype x)

建立樹:

建立樹的時候我們可以先將樹節點的資料存放到乙個陣列裡,然後分別將陣列的資料存放到樹結構中。列如:int a = ,「#」井號表示該節點為空。

btnode* createbtree(btdatatype* a, size_t* pindex, btdatatype invalid)

return null;

}

建立樹的時候採用先序遍歷的順序,第乙個引數為陣列。第二個引數為陣列下標,這裡需要注意,下標應該傳的是指標,因為建立樹使用遞迴來實現的,若傳的不是指標而是整型,當在遞迴呼叫的過程中返回之前的呼叫時,下標值會返回之前的數值,與預期不符。第三個引數則是乙個識別符號,用於判斷當前節點是否為空。

先序遍歷:

void btreeprevorder(btnode* root)

}

如果當前節點為空,則返回。若果不為空,則輸出當前節點,然後遍歷左孩子,再遍歷右孩子。

中序遍歷:

void btreeinorder(btnode* root)

}

如果當前節點為空,則返回。若果不為空,則遍歷左孩子,然後輸出當前節點,再遍歷右孩子。

後序遍歷:

void btreepostorder(btnode* root)

}

如果當前節點為空,則返回。若果不為空,則遍歷左孩子,再遍歷右孩子,然後輸出當前節點。

樹的節點個數:

size_t btreesize(btnode* root)

else

}

葉子節點的個數:

size_t btreeleafsize(btnode* root)

if (root->_left == null&&root->_right == null)

return btreesize(root->_left) + btreesize(root->_right);

}

第k層節點個數:

size_t btreeklevelsize(btnode* root, size_t k)

if (k == 1)

else

}

樹的深度:

size_t btreedepth(btnode* root)

if (root->_left == null&&root->_right == null)

else

}

如果當前節點為空則返回0,若當前節點的左右孩子都為空則返回1,如果上述兩種情況都不滿足則繼續遍歷左右孩子,最後返回較大的乙個。

查詢指定節點:

btnode* btreefind(btnode* root, btdatatype x)

if (root->_right != null)

}

二叉樹基本操作

tree.h ifndef tree h define tree h include typedef int element 定義二叉樹 typedef struct nodetreenode void preorder treenode root 遞迴前序遍歷 void inorder treen...

二叉樹基本操作

一.二叉樹的定義 二.二叉樹的建立 定義一棵無資料的二叉樹 6 int left size 7 int right size 為了操作簡便,我們定義一棵不需要儲存資料的二叉樹,只要能儲存節點之間的邏輯關係就行,所以用兩個陣列來表示。left i 第i個節點的左子節點的序號 right i 第i個節點...

二叉樹基本操作

include include define maxsize 100 typedef char elemtype typedef struct node btnode void createbtnode btnode b,char str 由str串建立二叉鏈 j ch str j btnode f...