二叉樹的實現
這是我複習的第三部分,二叉樹的實現,這次需要的**比較少,所以把主函式貼出來了,注釋也很清晰,所以大家直接看**吧:
//樹#ifndef
binnode_h
#define
binnode_h
template
<
class
elem
>
class
binnode;
#endif
//建樹操作
#ifndef
binnodeptr_h
#define
binnodeptr_h
#include
"binnode.h"
template
<
class
elem
>
class
binnodeptr
:public
binnode
<
elem
>
binnodeptr
(eleme,
binnodeptr* l
= null
,binnodeptr* r
= null)
~binnodeptr
(){}
elem
& val()
void
setval
(const
elem& e
) void
setval
( binnode
<
elem
>* b)
inline
binnode
<
elem
>*
left
()const
void
setleft
(binnode
<
elem
>* b)
inline
binnode
<
elem
>*
right
()const
void
setright
(binnode
<
elem
>* b)
bool
isleaf()
}; #endif
binnodeptr_h
//樹,這裡實現了樹的幾種方法
////(1)前序遍歷(dlr),首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。簡記根 - 左 - 右。
////(2)中序遍歷(ldr),首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。簡記左 - 根 - 右。
////(3)後序遍歷(lrd),首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點。簡記左 - 右 - 根。
#include
using
namespace
std;
#include
"binnode.h"
#include
"binnodeptr.h"
template
<
class
elem
>
//建樹
// a
// / \
// b c
// / \ \
// d e f
//建立此二叉樹的方法為:(abd e c f )
binnode
<
elem
>* createbintree()
else
returnt;
} template
<
class
elem
>
//複製該樹
binnode
<
elem
>* copybintree(
binnode
<
elem
>* p)
returnt;
} template
<
class
elem
>
//輸出單個節點
void
visit(
binnode
<
elem
>*
subroot)
template
<
class
elem
>
//前序
void
preorder(
binnode
<
elem
>*
subroot)
template
<
class
elem
>
//中序
void
inorder(
binnode
<
elem
>*
subroot)
//後序遍歷
template
<
class
elem
>
void
backorder(
binnode
<
elem
>*
subroot)
template
<
class
elem
>
//左右孩子互換
//我們仍然舉乙個例子
// a
// / \
// b c
// / \ \
// d e f
void
swithorder(
binnode
<
elem
>*
subroot)
t=subroot
->
left
();
//用右邊的節點覆蓋左邊節點
// a
// / \
// c c
// \ \
// f f
//t = b
subroot
->
setleft
(subroot
->
right
());
//把t付給右邊節點
// a
// / \
// c b
// \ /\
// f d e
subroot
->
setright
(t);
//遞迴,最終結果為
// a
// / \
// c b
// / /\
// f e d
swithorder(
subroot
->
left
());
swithorder(
subroot
->
right
()); }
intmain()
C 實現簡單二叉樹
二叉樹是重要的資料結構,這裡用c 簡單實現,暫時不考慮其增加 刪除和修改。二叉樹在底層其實就是用陣列儲存,可以用陣列實現二叉樹 首先建立乙個結構體,在其中儲存指標以及資料,這個結構體作為二叉樹的節點使用 template t struct binarytreenode 定義節點 然後就可以利用陣列建...
二叉樹最簡單構成
include 二叉樹鍊錶結構 typedef struct nodebitnode,bitree 建立二叉樹鍊錶 void createbitree bitree bt 先序遍歷輸出二叉樹 void preorder bitree root 中序遍歷輸出二叉樹 void inorder bitre...
二叉樹 排序二叉樹的簡單實現
二叉樹 排序二叉樹 include using namespace std 二叉樹的節點 date 資料 left 指向二叉樹的左子樹 right 指向二叉樹的右子樹 template struct node template class btree public btree root null c...