您的位置:首页 > 其它

NYOJ 756 重建二叉树【由二叉树的后序和中序建立二叉树并得先序】

2014-06-06 19:28 344 查看
思想的话就是那样:二叉树建立(由先序(或后序)和中序)

题目链接:点击打开链接

题意就是很裸的给你二叉树的后序很中序,求出先序。

我的做法还是先把二叉树建立起来然后再输出先序就可以了。

代码:

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;

const int N=100;
struct Node {
    char  date;
    Node *left,*right;
    Node (){
        left=NULL;
        right=NULL;
    }
};
void BuildBinaryTree(Node *& root,char *postorder,char *midorder,int len) {
    if(len==0) {
        root = NULL;//也就是左右子树为空的话,那么其的孩子节点为空..
        return ;
    }

    root = new Node();//否则的话为该节点的孩子分配空间并初始化.
    root->date=postorder[len-1];
    char *rootplace=strchr(midorder,root->date);//分为左右子树.

    int leftlen=strlen(midorder)-strlen(rootplace);
    int rightlen=len-leftlen-1;
    BuildBinaryTree(root->left,postorder,midorder,leftlen);
    BuildBinaryTree(root->right,postorder+leftlen,rootplace+1,rightlen);
}

void PreOrder(Node *root){
    if(root == NULL) return ;
    printf("%c",root->date);
    PreOrder(root->left);
    PreOrder(root->right);
}
int main(){
    char postorder
,midorder
;
    while(cin >> postorder >> midorder){
        Node *root=NULL;
        BuildBinaryTree(root,postorder,midorder,strlen(postorder));
        PreOrder(root);
        cout << endl;
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: