#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層有葉子節點,並且葉子節點都是從左到右一次排布 滿二叉樹 除了葉子節點外每乙個節點都要左...