二叉树的创建与中序遍历

任务描述

本关任务:利用扩展先序遍历创建二叉树,并给出相应二叉树的中序遍历结果。

相关知识

为了完成本关任务,你需要掌握: 1.二叉树的先序遍历 2.如何创建一棵二叉树 3.二叉树的中序遍历 4.二叉树的二叉链表存储表示。

二叉树的先序遍历

先序遍历(preorder traversal): 1、访问根结点; 2、先序遍历左子树; 3、先序遍历右子树。 例:图1表示一棵二叉树,先序遍历的结果为ABCD。 , 图1 示例二叉树

如何输入一棵二叉树 二叉树的先序遍历序列不能够确定一棵二叉树的形态,但是若对二叉树中缺失的孩子结点进行特殊值的补充,再进行先序遍历,得到扩展的先序遍历结果,则可以确定一棵二叉树的形态。 , 图2 原二叉树 先序遍历的结果为:ABCD

, 图3 扩展二叉树 扩展先序遍历的结果为:AB##CD###

如何创建一棵二叉树 根据先序遍历的思想: 若根结点为空,则根结点指针为空创建空树; 否则: (1)创建根结点, (2)先序遍历创建左子树; (3)先序遍历创建右子树。

二叉树的中序遍历

中序遍历inorder traversal是指按照先左子树,再根结点,最后右子树的次序访问二叉树中所有的结点,使得每个结点被访问且仅被访问一次。 例:图1表示一棵二叉树,中序遍历的结果为BADC。

二叉树的二叉链表存储表示

  1. typedef char ElemType;
  2. typedef struct BiTNode
  3. { ElemType data;
  4. struct BiTNode *lchild,*rchild;
  5. }BiTNode,*BiTree;

编程要求

在右侧编辑器中补充代码,完成CreateBiTree和InOrder两个操作函数,以实现二叉树的创建和中序遍历。具体要求如下:

  • CreateBiTree:利用先序遍历创建二叉树,返回其根指针。
  • InOrder:二叉树的中序遍历。

注意:在实现两个函数的函数体内可调用其他操作。

测试说明

可在右侧文件夹中查看step1/Main.cpp文件,以便于你的操作。

平台会对你编写的代码进行测试。

输入输出说明

输入为一组测试用例,输入二叉树的扩展先序遍历,‘#’表示空树,创建该二叉树的二叉链表,并进行输出其中序遍历结果。

测试输入: ABC##D##EF###

预期输出: CBDAFE (注意末尾不换行)

#include<iostream>
#include<string>
using namespace std;
struct BNode{//二叉树节点
    BNode(const char d='#'):data(d), left(nullptr), right(nullptr) {};
    char data;
    BNode* left;
    BNode* right;
};
//根据先序遍历构建一棵二叉树,返回root指针
BNode* constructBinaryTree(const string& preOrder, unsigned& index){
    if (preOrder.size() == 0 || index == preOrder.size() || preOrder[index] == '#')//若空串或者index超出范围,则返回空指针
        return nullptr;
    BNode* T = new BNode(preOrder[index++]);
    T->left = constructBinaryTree(preOrder, index);
    T->right = constructBinaryTree(preOrder, ++index);
    return T;
}
//中序遍历
void inOrder(BNode* T){
    if (T != nullptr){
        inOrder(T->left);
        cout << T->data;
        inOrder(T->right);
    }
}
int main(){
    string str;
    while (cin >> str){
        unsigned index = 0;
        BNode* root = constructBinaryTree(str, index);
        inOrder(root);
        cout << endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/xxxsans/p/14004377.html