数据结构9树与二叉树4.pptxVIP

  • 0
  • 0
  • 约5.57千字
  • 约 80页
  • 2022-05-17 发布于北京
  • 举报
树的定义和术语 二叉树的逻辑结构 二叉树的存储结构及实现 树的逻辑结构 树的存储结构 树、森林与二叉树的转换及其应用 哈夫曼树及哈夫曼编码;5.6 树、森林与二叉树的转换;;5.6 树、森林与二叉树的转换;3.顺时针转动,使之层次分明.;3.顺时针转动,使之层次分明.;树转换为二叉树 ;;EFBCGDA;树的层次遍历;森林转换为二叉树 ;;二叉树转换为树或森林 ;F;森林的遍历;一、建树的存储结构(孩子兄弟链表) ;例如:学校的行政关系、书的层次结构、人类的家族血缘关系、操作系统的资源管理器、应用程序的???单结构等;一、建树的存储结构的算法:;;void CreatTree( CSTree T ) { T = NULL; for( scanf(fa, ch); ch!=?#?; scanf(fa, ch)) { p = new CSNode; // 创建结点 p-data=ch; p-firstchild=p-nextsibling=NULL; EnQueue(Q, p); // 指针入队列 if (fa == ?# ?) T = p; // 所建为根结点 else { } // 非根结点的情况 } // for } // CreateTree ;GetHead(Q,s); // 取队列头元素(指针值) while (s-data != fa ) // 查询双亲结点 { DeQueue(Q,s); GetHead(Q,s); } if (s-firstchild==NULL) { s-firstchild = p; r = p; } // 链接第一个孩子结点 else { r-nextsibling = p; r = p; } // 链接其它孩子结点 ;设树的存储结构为孩子兄弟链表;int Depth(CSTree T) {// T 是树的孩子兄弟链表存储结构 if (T==NULL) return 0; else{ d1 = Depth(T-firstchild); d2 = Depth(T-nextsibling); return d1+1d2?d1+1:d2; };三、输出树中所有从根到叶子的路径的算法:;E;E;E;E;void AllBiTreePath( BiTree T, Stack S ) { if (T) { Push( S, T-data ); if (!T-lchild !T-rchild )//叶子结点 PrintStack(S);//输出栈内的所有结点 else {AllBiTreePath( T-lchild, S ); AllBiTreePath( T-rchild, S ); } Pop(S);//叶子结点或左右子树的叶子路径都完成 //的根结点 } // if(T) } // AllPath;输出树中所有从根到叶子的路径;E B A;F B A; C A; D A;void OutPath( CSTree T, Stack S ) { while (T ) {//依序从T的第一棵子树找 Push(S, T-data ); if ( !T-firstchild ) Printstack(S); else OutPath( T-firstchild, S ); Pop(S);//结点的第1棵子树的路径已找完 T = T-nextsibling;//找其余的兄弟 } // while } // OutPath;树的查找、插入和删除;1.树的查找算法;基于树的前序遍历的查找算法;if (T) { if (kval == T-data) ) ;2.树的插入算法;例如:插入(F,H) 例如:插入(A,K);int InsertBiT(CSTree T ) { CSTree p=NULL,q,s; char fa,ch; printf(请输入父结点和子结点(用空格隔开)\n); scanf(%c %c,fa,ch); if(fa==‘#’) //树为空,新结点是根结点 {s = new CSNode; //

文档评论(0)

1亿VIP精品文档

相关文档