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的不包...