C实现二叉树的建立和遍历

本文是二叉树的基本创建和遍历,代码是C,源码如下:

#include <stdio.h>
#include <stdlib.h> 

typedef char ElemType;

//定义节点
typedef struct BiTNode
{
    ElemType data;
    struct BiTNode *lChild,*rChild;
} BiTNode,*BiTree;


//创建一颗二叉树,约定用户是用前序遍历的方式输入数据的 
createBiTree(BiTree *T)
{
    ElemType c;
    scanf("%c",&c);
    if( ' ' == c) 
    {
        *T = NULL;
    }
    else
    {
        *T = (BiTNode *)malloc(sizeof(BiTNode));
        (*T)->data = c;
        createBiTree(&(*T)->lChild); 
        createBiTree(&(*T)->rChild);
    }
} 

void visit(char c,int level)
{
    printf("节点是%c 位于第%d层\n",c,level);
}

//前序遍历二叉树
void preOrderTraverse(BiTree T,int level)
{   
    if(T)
    {
        //处理根节点
        visit(T->data,level) ;
        //前序遍历左子树
        preOrderTraverse(T->lChild,level+1);
        //前序遍历右子树
        preOrderTraverse(T->rChild,level+1); 
    }

} 


void main() 
{   
    int level = 1;
    BiTree T = NULL;
    createBiTree(&T);
    preOrderTraverse(T,1);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是基于链表实现二叉树建立遍历的代码: ```c #include <stdio.h> #include <stdlib.h> struct Node { int data; struct Node *left; struct Node *right; }; void inorder(struct Node *root) { if (root != NULL) { inorder(root->left); printf("%d ", root->data); inorder(root->right); } } void preorder(struct Node *root) { if (root != NULL) { printf("%d ", root->data); preorder(root->left); preorder(root->right); } } void postorder(struct Node *root) { if (root != NULL) { postorder(root->left); postorder(root->right); printf("%d ", root->data); } } struct Node* newNode(int data) { struct Node* node = (struct Node*)malloc(sizeof(struct Node)); node->data = data; node->left = NULL; node->right = NULL; return node; } struct Node* insert(struct Node* node, int data) { if (node == NULL) { return newNode(data); } if (data < node->data) { node->left = insert(node->left, data); } else if (data > node->data) { node->right = insert(node->right, data); } return node; } int main() { struct Node *root = NULL; root = insert(root, 50); insert(root, 30); insert(root, 20); insert(root, 40); insert(root, 70); insert(root, 60); insert(root, 80); printf("Inorder traversal: "); inorder(root); printf("\nPreorder traversal: "); preorder(root); printf("\nPostorder traversal: "); postorder(root); return 0; } ``` 上述代码中,`Node` 结构体定义了二叉树的节点,包括节点的值、左子节点和右子节点。`newNode` 函数用于创建一个新的节点。`insert` 函数用于将一个节点插入到二叉树中。 `inorder`、`preorder` 和 `postorder` 分别用于实现中序遍历、前序遍历和后序遍历。在主函数中,我们将数据插入二叉树中,并按照不同的方式遍历输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值