南郵資料結構實驗6 1二叉樹的基本操作

2021-06-26 14:54:10 字數 3085 閱讀 3348

1.在二叉鍊錶上實現二叉樹運算

(1)設計遞迴演算法,實現下列二叉樹元算:

刪除一顆二叉樹,

求一顆二叉樹的高度,

求一棵二叉樹中葉子結點數,

複製一棵二叉樹,

交換一棵二叉樹的左右子樹。

#includeusing namespace std;

templatestruct btnode

btnode(const t &x)

btnode(const t &x,btnode *l,btnode *r)

};

template class seqqueue

bool isempty()const

bool isfull()const

bool front(t &x)const;

bool enqueue(t x);

bool dequeue();

void clear()

int getfront()

private:

int front, rear;

int maxsize;

t *q;

};template seqqueue::seqqueue(int msize)

template void seqqueue::initiaqueue()

}template bool seqqueue::front(t &x)const

~binarytree()

void maketree(const t &x,binarytree&left,binarytree&right);

void breaktree( t &x,binarytree&left,binarytree&right);

void preorder(void (*visit)(t &x));

int size();

void copy(binarytree &temp);

int height();

void exchange();

int leafnum();

void clear();

void levelorder(void (*visit)(t &x));

protected:

btnode*root;

private:

void preorder(void (*visit)(t &x),btnode*t);

int size(btnode *t);

btnode* copy(btnode* t);

int height(btnode* t);

void exchange(btnode*t);

int size(btnode*t);

int leafnum(btnode*t);

void clear(btnode*x);

//void levelorder (void (*visit)(t& x),btnode* &t);

void levelorder (btnode* t); };

/*maketree*/

templatevoid binarytree::maketree(const t &x,binarytree&left,binarytree&right)

/*breaktree*/

templatevoid binarytree::breaktree(t &x,binarytree&left,binarytree&right)

/*preorder*/

templatevoid visit(t &x)

templatevoid binarytree::preorder(void (*visit)(t &x),btnode*t)

}/*size*/

templateint binarytree::size()

templateint binarytree::size(btnode*t)

/*copy*/

templatevoid binarytree::copy(binarytree&temp)

template

btnode* binarytree::copy(btnode* t)

/*height*/

templateint binarytree::height()

templateint binarytree::height(btnode* t)

/*leafnum*/

templateint binarytree::leafnum()

templateint binarytree::leafnum(btnode*t)

/*exchange*/

template void binarytree::exchange()

template void binarytree::exchange(btnode*t)

/*clear*/

templatevoid binarytree::clear()

template void binarytree::clear(btnode*x)

/*levelorder*/

template //存在小bug

void binarytree::levelorder(void (*visit)(t &x))

template void binarytree::levelorder(btnode*t)

q.dequeue();

return;

}

//main

#ifndef btnode_h

#define btnode_h

#endif

#include"binary_tree.h"

void main()

{ binarytreea,b,x,y,z,newtree;

y.maketree('y',a,b);

z.maketree('z',a,b);

a.maketree('a',y,z);

x.maketree('x',a,b);cout<<"binarytree x:";x.preorder(visit);cout<

南郵資料結構實驗2 2 二叉樹遍歷的一些應用

題目 以實驗2.1的二叉鍊錶為儲存結構,編寫程式實現求二叉樹結點個數 葉子結點個數 二叉樹的高度以及交換二叉樹所有左右子樹的操作。部分 求二叉樹結點個數 求二叉樹結點個數 int size binarytreenode t 求二叉樹葉子結點個數 求二叉樹葉子結點個數 int leaf binaryt...

資料結構實驗之二叉樹四 還原二叉樹

time limit 1000ms memory limit 65536k 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入資料有多組,每組資料第一行輸入1個正整數n 1 n 50 為樹中結點總數,隨後2行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區分大小...

資料結構實驗之二叉樹四 還原二叉樹

time limit 1000ms memory limit 65536k 有疑問?點這裡 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入資料有多組,每組資料第一行輸入 1個正整數 n 1 n 50 為樹中結點總數,隨後 2行先後給出先序和中序遍歷序列,均是長度為 n的不包...