赞
踩
头歌实践平台答案educoder
/************************************************************* date: March 2019 二叉树的创建 实现文件 **************************************************************/ BiTree CreateBiTree() // 利用先序遍历创建二叉树,返回根指针。 { // 请在这里补充代码,完成本关任务 /********** Begin *********/ /* typedef char ElemType; typedef struct BiTNode { ElemType data; struct BiTNode *lchild,*rchild; }BiTNode, *BiTree; */ BiTree root; char ch; scanf("%c",&ch); if(ch=='#') root = NULL; else{ root = (BiTree)malloc(sizeof(BiTNode)); if(root!=NULL){ root-> data = ch; root->lchild = CreateBiTree(); root->rchild = CreateBiTree(); } } return root; /********** End **********/ } void InOrder(BiTree T) // 二叉树的中序遍历 // 参数:二叉树根指针T // 输出:中间没有空格,末尾不换行。 { // 请在这里补充代码,完成本关任务 /********** Begin *********/ if(T)//T!=NULL { InOrder(T->lchild); printf("%c",T->data); InOrder(T->rchild); } /********** End **********/ }
/************************************************************* date: March 2019 计算二叉树的深度和结点个数 实现文件 **************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "binary_tree.h" int GetTreeDepth(BiTree T) // 计算二叉树的深度 // 参数:二叉树根指针T // 返回:二叉树的深度 { // 请在这里补充代码,完成本关任务 /********** Begin *********/ int lsd=0,rsd=0,max=0; if(T!=NULL) { lsd = GetTreeDepth(T->lchild); rsd = GetTreeDepth(T->rchild); (lsd>rsd)?max=(lsd+1):max=(rsd+1); } return max; /********** End **********/ } int GetNodeNumber(BiTree T) // 计算二叉树的总结点个数 // 参数:二叉树根指针T // 返回:二叉树的总结点个数 { // 请在这里补充代码,完成本关任务 /********** Begin *********/ int count=0; if(T!=NULL) count = GetNodeNumber(T->lchild) + GetNodeNumber(T->rchild) + 1;//根节点 return count; /********** End **********/ } int GetLeafNodeNumber(BiTree T) // 计算二叉树的叶子结点个数 // 参数:二叉树根指针T // 返回:二叉树的叶子结点个数 { // 请在这里补充代码,完成本关任务 /********** Begin *********/ int count=0; if(T!=NULL) { if(T->lchild==NULL&&T->rchild==NULL) count = 1; else count = GetLeafNodeNumber(T->lchild) + GetLeafNodeNumber(T->rchild) ; } return count; /********** End **********/ }
/************************************************************* date: March 2019 实现二叉树左右子树交换 实现文件 **************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "binary_tree.h" BiTree BiTreeChange(BiTree T) // 实现二叉树左右子树的交换 // 参数:二叉树根指针T // 返回:二叉树根指针 { // 请在这里补充代码,完成本关任务 /********** Begin *********/ /* typedef struct BiTNode { ElemType data; struct BiTNode *lchild,*rchild; }BiTNode, *BiTree; //¶þ²æÁ´±íµÄÀàÐͶ¨Òå */ int max=10000; BiTNode* str[max]; int k=0; str[k]=0; if(T) { k++; str[k]=T->lchild; T->lchild=T->rchild; T->rchild=str[k]; T->lchild=BiTreeChange(T->lchild); T->rchild=BiTreeChange(T->rchild); k++; } return T; /********** End **********/ } void PreOrder(BiTree T) // 二叉树的先序遍历 // 参数:二叉树根指针T // 输出:二叉树的先序遍历,中间没有空格,末尾不换行。 { // 请在这里补充代码,完成本关任务 /********** Begin *********/ if(T!=NULL){ printf("%c",T->data); PreOrder(T->lchild); PreOrder(T->rchild); } /********** End **********/ }
/************************************************************* 层次遍历二叉树 实现文件 更新于2020年6月8日 **************************************************************/ void HierarchyOrder(BiTree T) // 二叉树的层次遍历(借助队列实现) // 参数:二叉树根指针T // 输出:二叉树的层次遍历,中间没有空格,末尾不换行。 { /* typedef char ElemType; //二叉链表中结点元素类型 typedef struct BiTNode { ElemType data; struct BiTNode *lchild,*rchild; }BiTNode, *BiTree; //二叉链表的类型定义 #define MAXSIZE 100 //最大长度 typedef BiTNode* QElemType; //队列中数据元素类型 typedef struct { QElemType *elem; //数组空间的起始地址 int front; // 存放队头元素的下标 int rear; // 存放队尾元素的下一个位置的下标 }SqQueue; */ // 请在这里补充代码,完成本关任务 /********** Begin *********/ // int e; SqQueue Q;//定义队列 SQ_Initiate(Q);//初始化队列 if(T!=NULL){ SQ_In(Q,T);//入根 } while(!SQ_IsEmpty(Q)){ SQ_Out(Q,T); printf("%c",T->data); if(T->lchild!=NULL) SQ_In(Q,T->lchild);//入根 if(T->rchild!=NULL) SQ_In(Q,T->rchild);//入根 } /********** End **********/ }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。