{
Matrix m , n ; Matrix * mm = &m ; Matrix * nn = &n ; In_Mat( mm ) ; Tra_Mat(mm , nn) ;
printf(\转置前矩阵非零元素:\\n\) ; Out_Mat(m) ;
printf(\转置后矩阵非零元素:\\n\) ; Out_Mat(n) ; system(\); return 0;
13、}
树和二叉树
以下问题要求统一在一个大程序里解决。
14、按先序遍历的扩展序列建立二叉树的存储结构 15、二叉树先序、中序、后序遍历的递归算法 16、二叉树中序遍历的非递归算法 17、二叉树层次遍历的非递归算法 18、求二叉树的深度(后序遍历)
#include \ #include \ #include \
typedef struct BiTr { struct {
void CrBiTr(BT & b) {
int a ;
b = (BT)malloc(sizeof(BiTr)) ;
printf(\请输入该结点的值,值为零表示删除该结点:\\n\) ; scanf_s(\,&a) ; BT q[100] ; int h , r ; int data ;
struct BiTr * lc , * rc ;
}BiTr , * BT ;
}queue ;
}
if(a == 0) { }
b->data = a ; CrBiTr(b->lc) ; CrBiTr(b->rc) ; b = NULL ; else
void visit(BT b) { }
void PreOrderTraverse(BT b) { }
void InOrderTraverse(BT b) { }
void PostOrderTraverse(BT b) { }
void InOrderTraverse1(BT b) {
BT s[500] , p ; int i = -1 ; p = b ; while(p) {
PreOrderTraverse(b->lc); PreOrderTraverse(b->rc); visit(b) ;
InOrderTraverse(b->lc); visit(b) ;
InOrderTraverse(b->rc); visit(b) ;
PreOrderTraverse(b->lc); PreOrderTraverse(b->rc); printf(\ , b->data) ;
}
}
if(p) {
i++ ; s[i] = p; p = p->lc ;
} else { }
p = s[i]; i--;
printf(\,p->data); p = p->rc ;
void CengciTraverse(BT b) { }
BT p = b ; queue.h = 0 ; queue.r = 0 ; if(b)
printf(\,p->data) ; queue.q[queue.r] = p ; queue.r++ ;
while(queue.h < queue.r) { }
p = queue.q[queue.h] ; queue.h++ ; if(p->lc) { }
if(p->rc) { }
printf(\,p->rc->data) ; queue.q[queue.r] = p->rc ; queue.r++ ;
printf(\,p->lc->data) ; queue.q[queue.r] = p->lc ; queue.r++ ;
int Depth(BT b) { }
int _tmain(int argc, _TCHAR* argv[]) {
int a = 1; BT b = NULL ;
printf(\二叉树的操作,请选择序号:\\n\) ;
printf(\按先序遍历的扩展序列建立二叉树的存储结构:\\n\) ; printf(\二叉树先序、中序、后序遍历的递归算法:\\n\) ; printf(\二叉树中序遍历的非递归算法:\\n\) ; printf(\二叉树层次遍历的非递归算法:\\n\) ; printf(\求二叉树的深度(后序遍历):\\n\) ; scanf_s(\,&a) ; while(a != 0)
{
switch(a) { case 1 :
{ } {
printf(\先序遍历如下:\\n\) ; PreOrderTraverse(b) ; printf(\中序遍历如下:\\n\) ; printf(\开始创建:\\n\) ; CrBiTr(b) ; break ;
int dep = 0 ,dep1 ,dep2 ; if (b = NULL) { }
dep1 = Depth(b->lc) ; dep2 = Depth(b->rc) ; if(dep1 > dep2)
dep = dep1 + 1 ; dep = dep2 + 1 ; else
return dep ; return 0 ; else
case 2 :
}
}
} { } { } { }
InOrderTraverse(b) ;
printf(\后序遍历如下:\\n\) ; PostOrderTraverse(b) ; break ;
case 3 :
printf(\中序遍历的非递归算法:\\n\); InOrderTraverse1(b) ; break ;
case 4 :
printf(\层次遍历的非递归算法\) ; CengciTraverse(b); break ;
case 5 :
printf(\二叉树的深度为:\\n\) ; Depth( b ) ; break ;
system(\) ; return 0;
}
19、建立树的存储结构 20、求树的深度 #include \#include \#include \
typedef struct TreeNode { int data ; struct TreeNode * chil , * bro ; }TreeNode , * Tree ;
void Create(Tree & b) { int a ; b = (Tree)malloc(sizeof(TreeNode)) ;