当前位置:   article > 正文

Educoder头歌数据结构-树和二叉树及其应用_头歌二叉树答案

头歌二叉树答案

头歌实践平台答案educoder

数据结构-树和二叉树及其应用

第1关二叉树的创建

/*************************************************************
    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 **********/
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

第2关计算二叉树的深度和结点个数

/*************************************************************
    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 **********/
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

实现二叉树左右子树交换

/*************************************************************
    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 **********/
}



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

层次遍历二叉树

/*************************************************************
    层次遍历二叉树  实现文件 
    更新于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 **********/
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/826112
推荐阅读
相关标签
  

闽ICP备14008679号