C语言 先序 创建二叉树,中序遍历+后序遍历,查找一个数

先定义节点

struct tnode{
    char data;
    struct tnode *lchild,*rchild;
};

1.用先根的方法创建一颗二叉树

struct tnode * creatTree(struct tnode *head){
    char e;
    scanf("%c",&e);
    fflush(stdin);
    if(e != '#'){
         head = (struct tnode *)malloc(sizeof(struct tnode));//先开辟空间
         head ->data = e;//判断不是'#'后,给根节点赋值
         head ->lchild = NULL;
         head ->rchild = NULL;      //依次把左儿子和右儿子调用该方法进行赋值
         head ->lchild = creatTree(head->lchild);
         head ->rchild = creatTree(head->rchild);
    }
    return head;
}

2.实现二叉树的中根遍历和后根遍历

2.1 中根遍历
void inorderTree(struct tnode *head){


    //先走左子树
    if(head->lchild !=NULL){
        inorderTree(head->lchild);
    }
    //再走头结点
    printf("%c",head->data);

     //再走右子树
    if(head->rchild != NULL){
        inorderTree(head->rchild);
    }

    return;
}
2.2 后根遍历
void postorderTree(struct tnode *head){
    //先左子树
    if(head->lchild != NULL){
        postorderTree(head->lchild);
    }

    //再右子树

    if(head->rchild != NULL){
        postorderTree(head->rchild);
    }
    //最后根节点
    printf("%c",head->data);
    return;
}

3.在二叉树中查找数据

/* 查找特定值 */
void SearchData(int targ, struct tnode *head)
{
    if (head != NULL)
    {
        if (head->data == targ)
        {
            printf("查找值存在,值为%d\n", head->data);
        }
        else if (head->data > targ)
        {
            SearchData(targ, head->lchild);    //递归查找左子树
        }
        else if (head->data < targ)
        {
            SearchData(targ, head->rchild);    //递归查找右子树
        }
    }
    else if (head == NULL)
    {
        printf("查找值不存在\n");
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用C语言实现先序遍历、中序遍历后序遍历创建二叉树的示例代码: ```c #include <stdio.h> #include <stdlib.h> typedef struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; } TreeNode; // 根据先序遍历和中序遍历创建二叉树 TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize) { if (preorderSize == 0 || inorderSize == 0) { return NULL; } // 创建根节点 TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); root->val = preorder[0]; root->left = NULL; root->right = NULL; // 在中序遍历中找到根节点位置 int i = 0; while (inorder[i] != root->val) { i++; } // 递归创建左子树和右子树 root->left = buildTree(preorder + 1, i, inorder, i); root->right = buildTree(preorder + i + 1, preorderSize - i - 1, inorder + i + 1, inorderSize - i - 1); return root; } // 后序遍历二叉树 void postorderTraversal(TreeNode* root) { if (root == NULL) { return; } postorderTraversal(root->left); postorderTraversal(root->right); printf("%d ", root->val); } int main() { int preorder[] = {1, 2, 4, 5, 3, 6, 7}; int inorder[] = {4, 2, 5, 1, 6, 3, 7}; int size = sizeof(preorder) / sizeof(preorder[0]); TreeNode* root = buildTree(preorder, size, inorder, size); printf("后序遍历结果:"); postorderTraversal(root); printf("\n"); return 0; } ``` 运行结果: ``` 后序遍历结果:4 5 2 6 7 3 1 ``` 代码中先定义了一个 `TreeNode` 结构体,表示二叉树的节点。`buildTree` 函根据先序遍历和中序遍历创建二叉树,先创建根节点,然后在中序遍历中找到根节点位置,递归创建左子树和右子树。 `postorderTraversal` 函后序遍历二叉树的实现,先遍历左子树,再遍历右子树,最后访问根节点并输出节点值。 在 `main` 函中,定义了两个组,分别表示先序遍历和中序遍历的结果。`buildTree` 函创建二叉树,`postorderTraversal` 函后序遍历二叉树并输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值