1.若想返回多个值,可以创建一个结构体,返回结构体
2.递归创建二叉树
思路:
二叉树的根和size CreateTree(前序,size)
{
终止条件:
1.遇到‘#’,return{NULL,1}
2.遇到size==0,return{NULL,0}
创建根,赋值;
根->left,用了多少值=CreateTree(左子树的前序,size-1);
根->right,用了多少值=CreateTree(右子树的前序=前序+(根(1)+左子树(5)),size-1-leftsize);
return (根,size(左子树size+右子树size+1));
}
代码如下
//一棵树的前序遍历为ABE###CD,#为空节点NULL,构建二叉树
#include<iostream>
using namespace std;
typedef struct Node
{
Node* left;
Node* right;
char value;
}Node;
typedef struct
{
Node* root; //创建出的根节点
int size; //创造过程中用掉的前序遍历的值
}result; //使用结构体使可以返回多个值
result CreateTree(char arr[],int size)
{
if (size == 0)
{
result r = {NULL,0};
return r;
}
char rootValue = arr[0];
if (rootValue == '#')
{
result r = { NULL, 1 };
return r;
}
Node* root = (Node*)malloc(sizeof(Node));
root->value = rootValue;
result leftResult = CreateTree(arr + 1, size - 1);
root->left = leftResult.root;
result rightResult = CreateTree(arr + 1+leftResult.size, size - 1-leftResult.size);
root->right = rightResult.root;
result r = { root, 1 + leftResult.size + rightResult.size };
return r;
}
void Test1()
{
char* str = "ABC##DE";
int size = strlen(str);
result r = CreateTree(str, size);
printf("根的值是:%c\n", r.root->value);
}
int main()
{
Test1();
system("pause");
return 0;
}