算法与数据结构——二叉树遍历应用

题目:

 

代码:

#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct TreeNode
{
    char data;
    struct TreeNode* lchild;
    struct TreeNode* rchild;
}TreeNode;
//先序创建二叉树
TreeNode* CreateTree(char* arr,int *pi)
{
    //arr->字符串
    //pi->下标位置
    if (arr[*pi] == '#')
       return NULL;
    else
    {
       TreeNode * root = (TreeNode *)malloc (sizeof(TreeNode));
       root->data = arr[*pi];
        
       ++(*pi);
       root->lchild = CreateTree(arr,pi);
        
       ++(*pi);
       root->rchild = CreateTree(arr,pi);
        
       return root;
    } 
}
//中序遍历输出
void InOrderTraversal(TreeNode * root)
{
    if (root == NULL)
        return ;
    InOrderTraversal(root->lchild);
    cout << root->data << " ";
    InOrderTraversal(root->rchild);
}

int main()
{
     char arr[100];
     cin >> arr;
     int i = 0;
     TreeNode * root = CreateTree(arr,&i);
     InOrderTraversal(root);
     return 0;
}

参考:编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。_NTZ5bzZKdUw的博客-CSDN博客

参考:二叉树遍历(c++) - 知乎 (zhihu.com)

posted @ 2022-10-21 13:01  sodamate  阅读(25)  评论(0编辑  收藏  举报