C 實現二叉樹的基本操作

2021-08-04 05:05:57 字數 3483 閱讀 9673

樹是一種重要的非線性資料結構,二叉樹是樹型結構的一種重要型別。本學年**介紹了二叉樹的定義,二叉樹的儲存結構,二叉樹的相關術語,以此引入二叉樹這一概念,為展開二叉樹的基本操作做好理論鋪墊。二叉樹的基本操作主要包含以下幾個模組:二叉樹的遍歷方法,計算二叉樹的結點個數,計算二叉樹的葉子結點個數,二叉樹深度的求解等內容。

訪問根節點

前序訪問左子樹

前序訪問右子樹

//前序非遞迴

void prevorder()

//此時當前節點的左子樹已遍歷完畢

node *tmp = s.top();

s.pop();

cur = tmp->_right;

}cout

<< endl;

}//前序遞迴

void prevorderr()

void _prevorder(node *root)

中序訪問左子樹

訪問根節點

中序訪問右子樹

//中序非遞迴

void inorder()

//此時當前節點的左子樹已遍歷完畢

node *tmp = s.top();

cout

<< tmp->_data << " ";

s.pop();

cur = tmp->_right;

}cout

<< endl;

}//中序遞迴

void inorderr()

void _inorder(node *root)

//後序非遞迴

//後序遍歷可能會出現死迴圈,所以要記錄下前乙個訪問的節點

void postorder()

node *tmp = s.top();

if (tmp->_right && tmp->_right != prev)

else

}cout

<< endl;

}//後序遞迴

void postorderr()

void _postorder(node *root)

從根節點開始,依次訪問每層結點。

利用佇列先進先出的特性,把每層結點從左至右依次放入佇列。

void levelorder()  //利用佇列!!!

//2.遍歷當前節點,push當前節點的左右孩子,pop當前節點

//3.遍歷當前節點的左孩子,再遍歷右孩子,迴圈直至隊列為空

while (!q.empty())

cout

<< endl;

}

size_t depth()

size_t _depth(node *root)

}

size_t leafsize()

size_t _leafsize(node *root)

size_t getklevel(int k)

size_t _getklevel(node *root, int k)

完整**如下:

template

struct binarytreenode

};template

class binarytree

binarytree(t *arr, size_t n, const t& invalid)

binarytree(const binarytree& t)

:_root(null)

binarytree& operator=(const binarytree& t)

}return *this;

}~binarytree()

//前序非遞迴

void prevorder()

//此時當前節點的左子樹已遍歷完畢

node *tmp = s.top();

s.pop();

cur = tmp->_right;

}cout

<< endl;

}//前序遞迴

void prevorderr()

//中序非遞迴

void inorder()

//此時當前節點的左子樹已遍歷完畢

node *tmp = s.top();

cout

<< tmp->_data << " ";

s.pop();

cur = tmp->_right;

}cout

<< endl;

}//中序遞迴

void inorderr()

//後序非遞迴

//後序遍歷可能會出現死迴圈,所以要記錄下前乙個訪問的節點

void postorder()

node *tmp = s.top();

if (tmp->_right && tmp->_right != prev)

else

}cout

<< endl;

}//後序遞迴

void postorderr()

void levelorder() //利用佇列!!!

//2.遍歷當前節點,push當前節點的左右孩子,pop當前節點

//3.遍歷當前節點的左孩子,再遍歷右孩子,迴圈直至隊列為空

while (!q.empty())

cout

<< endl;

}size_t size()

size_t leafsize()

size_t getklevel(int k)

size_t depth()

node* find(const t& d)

protected:

node* _createbinarytree(t *arr, size_t n, const t& invalid, size_t& index)

return root;

}node* _copytree(node *root)

return newroot;

}void _destroytree(node *root)

}void _prevorder(node *root)

void _inorder(node *root)

void _postorder(node *root)

size_t _size(node *root)

size_t _leafsize(node *root)

size_t _getklevel(node *root, int k)

size_t _depth(node *root)

}node* _find(node *root, const t& d)

protected:

node *_root;

};

C 實現二叉樹的基本操作

1.定義類標頭檔案 pragma once include using namespace std 定義樹的節點 typedef struct binode binode,bitree 定義二叉樹類 class bitree 2 實現函式功能 include 建立二叉樹.h include incl...

二叉樹的基本操作實現

二叉樹需要不斷的自己畫圖並且一步一步的跟著程式走才能明白它的原理 二叉樹結點結構定義 binode,bitree 通過前序遍曆法建立一棵二叉樹,其形參使用結點的二級指標。當每個葉結點的左右孩子是 時表示二叉樹建立完成 void createtree bitree t 釋放二叉樹空間 void des...

C 實現二叉樹基本操作詳解

樹是一種重要的非線性資料結構,二叉樹是樹型結構的一種重要型別。本學年 介紹了二叉樹的定義,二叉樹的儲存結構,二叉樹的相關術語,以此引入二叉樹這一概念,為展開二叉樹的基本操作做好理論鋪墊。二叉樹的基本操作主要包含以下幾個模組 二叉樹的遍歷方法,計算二叉樹的結點個數,計算二叉樹的葉子結點個數,二叉樹深度...