已知先、中序序列,构造二叉树问题
看到一道面试题,觉得好玩,写了个算法
一起交流一下,希望能抛砖引玉,并望高手指正
#include <stdio.h>
#include <string.h>
struct Node
{
Node* left;
Node* right;
char value;
};
void Rebuild(char* preOrder/*先序*/, char* inOrder/*中序*/,
int length/*子树长度*/, Node** root/*root为输出*/)
{
if (length == 0)
{
*root = NULL;
return;
}
(*root) = new Node;
(*root)->value = preOrder[0];
char tmp = preOrder[0];
for (int i=0; i<length; i++)
{
if (inOrder[i] == tmp)
break;
}
Rebuild(preOrder+1, inOrder, i, &((*root)->left));
Rebuild(preOrder+i+1, inOrder+i+1, length-i-1, &((*root)->right));
}
void PostOrder(Node* root)
{
if (root != NULL)
{
PostOrder(root->left);
PostOrder(root->right);
printf("%c", root->value);
}
}
int main()
{
char* preOrder = "abdecfg";
char* inOrder = "dbeafcg";
Node* root;
Rebuild(preOrder, inOrder, strlen(preOrder), &root);
PostOrder(root);
printf("\n");
return 0;
}
一起交流一下,希望能抛砖引玉,并望高手指正
#include <stdio.h>
#include <string.h>
struct Node
{
Node* left;
Node* right;
char value;
};
void Rebuild(char* preOrder/*先序*/, char* inOrder/*中序*/,
int length/*子树长度*/, Node** root/*root为输出*/)
{
if (length == 0)
{
*root = NULL;
return;
}
(*root) = new Node;
(*root)->value = preOrder[0];
char tmp = preOrder[0];
for (int i=0; i<length; i++)
{
if (inOrder[i] == tmp)
break;
}
Rebuild(preOrder+1, inOrder, i, &((*root)->left));
Rebuild(preOrder+i+1, inOrder+i+1, length-i-1, &((*root)->right));
}
void PostOrder(Node* root)
{
if (root != NULL)
{
PostOrder(root->left);
PostOrder(root->right);
printf("%c", root->value);
}
}
int main()
{
char* preOrder = "abdecfg";
char* inOrder = "dbeafcg";
Node* root;
Rebuild(preOrder, inOrder, strlen(preOrder), &root);
PostOrder(root);
printf("\n");
return 0;
}
...全文
相关推荐
数据结构实验代码先序+中序序列构造树.rar
这个"数据结构实验代码先序+中序序列构造树.rar"文件显然包含了一个关于如何通过先序和中序遍历序列来构建二叉树的实验代码。
C++代码大全(二叉树算法)
### C++代码大全之二叉树算法:已知先序与中序序列确定二叉树#### 知识点概述本篇文章主要介绍了一种基于已知先序遍历序列和中序遍历序列来重建二叉树的算法。
C++实现二叉树遍历序列的求解方法
在二叉树的遍历序列问题中,有三种常见的遍历方式:先序遍历、中序遍历和后序遍历。每种遍历序列都有其特定的特点,可以用来构造或还原二叉树。先序遍历的顺序是:根节点 -> 左子树 -> 右子树。
数据结构实验报告二叉树.doc
总的来说,这个数据结构实验报告详细介绍了二叉树的概念,遍历方法,以及如何根据遍历序列构造和变换二叉树。这对于理解二叉树的性质、操作以及在实际问题中的应用具有重要意义。
实习二 [唯一的确定一颗二叉树].doc
在归纳步骤中,假设已知树中少于m个节点时,序列可以唯一确定一棵二叉树,那么对于有m个节点的树,我们也能够通过前序序列和中序序列中元素的分割来递归地确定整棵树的结构。


