二叉树的基本操作


tree.h
#pragma once 
typedef char TreeNodeType; 

typedef struct TreeNode { 
TreeNodeType data; 
struct TreeNode* lchild; 
struct TreeNode* rchild; 
} TreeNode; 

void TreeInit(TreeNode** root); //初始化二叉树

void PreOrder(TreeNode* root); //递归先序遍历

void InOrder(TreeNode* root); 递归中序遍历

void PostOrder(TreeNode* root); 递归后序遍历

void LevelOrder(TreeNode* root); //层序遍历

TreeNode* _TreeCreate(TreeNodeType array[], size_t *index,size_t size, TreeNodeType null_node); 

 void TreeDestroy(TreeNode* root); 

 TreeNode* TreeClone(TreeNode* root); //二叉树的克隆

 size_t TreeSize(TreeNode* root); //求节点个数

 size_t TreeLeafSize(TreeNode* root); //求叶子节点个数

 size_t TreeKLevelSize(TreeNode* root, int K); //第K层节点个数

 size_t TreeHeight(TreeNode* root); //二叉树的高度

 TreeNode* TreeFind(TreeNode* root, TreeNodeType to_find); //二叉树的查找

 reeNode* LChild(TreeNode* node); //查找当前节点的左子树

 TreeNode* RChild(TreeNode* node); //查找当前节点的右子树

 TreeNode* Parent(TreeNode* root, TreeNode* node); //查找当前节点的父节点

 void PreOrderByLoop(TreeNode* root); //非递归先序遍历

 void InOrderByLoop(TreeNode* root); //非递归中序遍历

 void PostOrderByLoop(TreeNode* root); //非递归后序遍历

 void TreeMirror(TreeNode* root); //镜像二叉树

 int IsCompleteTree(TreeNode* root);//判读是否为完全二叉树
tree.c
#include"seqstack.h"
#include<stdio.h>
#include"tree.h"
#include"linkqueue.h"
#include<stdlib.h>

void TreeInit(TreeNode** root)
{
    if(root == NULL)
    {
        return;
    }
    *root = NULL;
}
void PreOrder(TreeNode* root)
{
    if(root == NULL)
    {
        return;
    }
    printf("%c ",root->data);
    PreOrder(root->lchild);
    PreOrder(root->rchild);
}

void InOrder(TreeNode* root)
{
    if(root == NULL)
    {
        return;
    }
    InOrder(root->lchild);
    printf("%c ",root->data);
    InOrder(root->rchild);
}

void PostOrder(TreeNode* root)
{
    if(root == NULL)
    {
        return;
    }
    PostOrder(root->lchild);
    PostOrder(root->rchild);
    printf("%c ",root->data);
    
}

void LevelOrder(TreeNode* root)
{
    if(root == NULL)
    {
        return;
    }
    LinkQueue queue;
    LinkQueueInit(&queue);
    LinkQueuePush(&queue,root);
    while(1)
    {
        LinkQueueType top;
        int ret = LinkQueueFront(&queue,&top);
        if(ret &
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值