二叉樹最簡單實現(c )

2021-09-02 10:10:49 字數 3818 閱讀 4816

二叉樹的實現

這是我複習的第三部分,二叉樹的實現,這次需要的**比較少,所以把主函式貼出來了,注釋也很清晰,所以大家直接看**吧:

//樹#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...