数据结构 二叉树的建立 与各种遍历

本文介绍了一种使用C++实现二叉树的各种遍历方法,包括先序、中序和后序遍历的递归及非递归实现。通过具体的代码示例,详细展示了如何构建二叉树并进行不同方式的遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <string.h>
using namespace std;
class tree
{
    public:
    char c;
    tree* rchild,*lchild;
};
char c;
int main()
{
    void build(tree *&p);
    void Preorder(tree *p);
    void Inorder1(tree *p);
    void Inorder2(tree *p);
    void Inorder3(tree *p);
    void Postorder(tree *p);
    int i,j,n,m,s,t;
    tree *head;
    build(head);
    cout<<"先序递归遍历:"<<endl;
    Preorder(head);
    cout<<endl;
    cout<<"中序递归遍历遍历:"<<endl;
    Inorder1(head);
    cout<<endl;
    cout<<"中序非递归遍历:"<<endl;
    Inorder2(head);
    cout<<endl;
    cout<<"中序非递归遍历:"<<endl;
    Inorder3(head);
    cout<<endl;
    cout<<"后续遍历:"<<endl;
    Postorder(head);
    cout<<endl;
    return 0;
}
void build(tree *&p)
{
    cin>>c;
    if(c=='$')
    {
        p=NULL;
    }else
    {
        p=new(tree);
        p->c=c;
        build(p->lchild);
        build(p->rchild);
    }
}
void Preorder(tree *p)
{
    if(p)
    {
        cout<<p->c;
        Preorder(p->lchild);
        Preorder(p->rchild);
    }
}
void Inorder1(tree *p)
{
    if(p)
    {
        Inorder1(p->lchild);
        cout<<p->c;
        Inorder1(p->rchild);
    }
}
void Inorder2(tree *p)
{
    int top=0;
    tree* statck[10000];
    statck[top++]=p;
    while(top>0)
    {
        while((p=statck[top-1])&&p)
        {
            p=p->lchild;
            statck[top++]=p;
        }
        top-=1;
        if(top>0)
        {
            p=statck[--top];
            cout<<p->c;
            statck[top++]=p->rchild;
        }
    }
}
void Inorder3(tree *p)
{
    int top=0;
    tree* statck[100000];
    while(p||top>0)
    {
        if(p)
        {
            statck[top++]=p;
            p=p->lchild;
        }else
        {
            p=statck[--top];
            cout<<p->c;
            p=p->rchild;
        }
    }
}
void Postorder(tree *p)
{
    if(p)
    {
        Postorder(p->lchild);
        Postorder(p->rchild);
        cout<<p->c;
    }
}

在C语言中,二叉树是一种常见的数据结构,它由节点组成,每个节点最多有两个子节点,通常称为左子节点右子节点。构建遍历二叉树的基本步骤如下: **建立二叉树**: 1. **创建节点**: 定义一个结构体表示二叉树的节点,包含一个值、指向左右子节点的指针(通常是`struct Node* left`, `struct Node* right`)。 ```c typedef struct Node { int data; struct Node* left; struct Node* right; } Node; ``` 2. **插入操作**: 根据给定值通过递归的方式将节点添加到树中,通常是比较当前值目标位置的值并选择合适的位置。 ```c void insert(Node** root, int val) { if (*root == NULL) { *root = (Node*)malloc(sizeof(Node)); (*root)->data = val; (*root)->left = NULL; (*root)->right = NULL; } else if (val < (*root)->data) { insert(&(*root)->left, val); } else { insert(&(*root)->right, val); } } ``` 3. **构建示例**: 创建一个空的根节点,并逐个插入元素。 **遍历二叉树**: 1. **前序遍历**: 先访问根节点,然后递归地遍历左子树,最后遍历右子树。 ```c void preorderTraversal(Node* root) { if (root != NULL) { printf("%d ", root->data); preorderTraversal(root->left); preorderTraversal(root->right); } } ``` 2. **中序遍历**: 先递归遍历左子树,然后访问根节点,最后遍历右子树。 ```c void inorderTraversal(Node* root) { if (root != NULL) { inorderTraversal(root->left); printf("%d ", root->data); inorderTraversal(root->right); } } ``` 3. **后序遍历**: 先递归遍历左子树右子树,最后访问根节点。 ```c void postorderTraversal(Node* root) { if (root != NULL) { postorderTraversal(root->left); postorderTraversal(root->right); printf("%d ", root->data); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值