二叉樹的實現及相關函式的實現

2021-07-31 14:34:07 字數 3010 閱讀 7200

#include 

#include

#include

using

namespace

std;

template

struct binarynode //__預設建構函式__

t _pdata;//__值域__

binarynode* _pleftchild;//__左孩子__

binarynode* _prightchild;//__ 右孩子__

typedef binarynodenode;

};template

class binartytree

binartytree(const t* arr, int size, t& invalid)//__帶有引數的建構函式__

:_invalid(invalid)

binartytree(const binartytree& bt)//__拷貝建構函式__

~binartytree()//__析構函式__

void frontorder()//遞迴前序遍歷,但因為需要傳參,所以用c語言再次進行封裝

void frontorder_nor()//非遞迴前序遍歷

cout

<< endl << endl;

}void inorder()//遞迴中序遍歷,但因為需要傳參,所以用c語言再次進行封裝

void inorder_nor()//非遞迴中序遍歷

temp = s.top();//取棧頂元素,訪問後出棧

s.pop();

cout

<< temp->_pdata << " ";

temp = temp->_prightchild;//開始儲存當前節點的右子樹,並當做乙個普通樹進行上述方法儲存

}cout

<< endl << endl;

}void postorder()//遞迴後序遍歷,但因為需要傳參,所以用c語言再次進行封裝

void postorder_nor()//非遞迴後序遍歷

;stack

s;//使用棧

node* temp = _proot;

while (temp || !s.empty())

if (!s.empty())//左子樹走到盡頭

else}}

cout

<< endl << endl;

}void levelorder()//層序遍歷,但因為需要傳參,所以用c語言再次進行封裝

node* getparents(node* child)//獲取雙親結點,列印並返回位址,但因為需要傳參,所以用c語言再次進行封裝

node* getleftchild(node* parent)//獲取左孩子結點,列印並返回位址,但因為需要傳參,所以用c語言再次進行封裝

node* getrightchild(node* parent)//獲取右孩子結點,列印並返回位址,但因為需要傳參,所以用c語言再次進行封裝

size_t sumleafnode()//獲取葉子結點的個數,列印並返回數值,但因為需要傳參,所以用c語言再次進行封裝

node* findnode(t value)//判斷該元素是否在樹中,存在的話列印並返回位址,不存在返回null,同樣用c語言進行封裝

size_t hightofbintree()//獲取樹的高度,列印並返回數值,但因為需要傳參,所以用c語言再次進行封裝

size_t getklevelcount(size_t k)//獲取第k層結點的個數,列印並返回數值,但因為需要傳參,所以用c語言再次進行封裝

void binarymirror()//遞迴建立二叉樹的映象樹,但因為需要傳參,所以用c語言再次進行封裝

void binarymirror_nor()//非遞迴建立二叉樹的映象樹

}private:

void creatbintree(node*& proot, const t* arr, int size, t& invalid, int& index)//__建立樹__

}void copy(node*& proot, node* srcnode, t& invalid)//__拷貝函式__

}void destroy(node*& proot)//__銷毀函式__

}void _frontorder(node* proot)//遞迴前序遍歷

}void _inorder(node* proot)//遞迴中序遍歷

}void _postorder(node* proot)//遞迴後序遍歷

}void _levelorder(node* proot)//層序

}//求葉子節點的個數

//方法1:

//int _sumleafnode(node* proot, int& sum)

//// else

// return sum;

//}int _sumleafnode(node* proot)

node* _findnode(node* proot, t& value)//查詢value是否在二叉樹中

else

return null;

}size_t _hightofbintree(node* proot) //求樹的高度

node* _getparents(node* proot, node* child)//獲取雙親節點

node* _getleftchild(node* proot, node* parent)//獲取左孩子

node* _getrightchild(node* proot, node* parent)//獲取右孩子

size_t _getklevelcount(node* proot, size_t k)//獲取第k層節點的個數

void _binarymirror(node* proot)//遞迴製造映象樹

node* _proot;

t _invalid;

};void funtest()//測試函式

int main()

二叉樹的實現及遍歷

二叉樹是一種非常重要的資料結構,接下來看看如何用 來實現二叉樹,以及二叉樹的插入和遍歷。public class node public void add int s elseif int this value s 將s插入到本節點的左子樹 leftnode.add s else rightnode...

二叉樹的實現

typedef struct nodebintnode,bintree 自定義二叉樹的結點型別 int nodenum,leaf nodenum為結點數,leaf為葉子數 基於先序遍歷演算法建立二叉樹 要求輸入先序序列,其中加入虛結點 以示空指標的位置 bintree creatbintree dl...

二叉樹的實現

樹和二叉樹的區別 樹中節點的子節點個數沒有限制,而二叉樹的節點最多為兩個 樹中的節點無左右之分,而二叉樹有左右之分 完全二叉樹 若設二叉樹的高度為h,除第h層外,其他各層 1 h 1 的節點數都達到最大個數,第h層有葉子節點,並且葉子節點都是從左到右一次排布 滿二叉樹 除了葉子節點外每乙個節點都要左...