若以先根次序遍历一棵二叉树,请设计如下算法,输出所有结点的关键字及结点所在层次。
解题思路:首先要依据前序和中序序列递归构建出二叉树,再先根遍历二叉树,注意本题多出了求结点所在层次的要求。
#include<stdio.h>
#include<string>
#include<algorithm>
using namespace std;
typedef struct Tree
{
int data;
Tree *left;
Tree *right;
}*tree;
string qx="12485309";
string zx="84251039";
tree build(string qx,string zx)//前中序构建二叉树
{
if(qx.size()==0) return NULL;
tree root=(tree)malloc(sizeof(Tree));
root->data=qx[0]-'0';
int pos=zx.find(qx[0]);
root->left=build(qx.substr(1,pos),zx.substr(0,pos));
root->right=build(qx.substr(pos+1),zx.substr(pos+1));
return root;
}
void preorder(tree root,int level)//函数主体
{
if(root==NULL) return;//空树直接返回
printf("data:%d level:%d\n",root->data,level);//输出结点及层数
preorder(root->left,level+1);//递归遍历左子树
preorder(root->right,level+1); //递归遍历右子树
}
int main()
{
tree root=build(qx,zx);
preorder(root,0);
}