目录
二叉树的数据结构天然满足递归。以前序遍历为例,访问根节点->左子树->右子树,访问到左子树树时,又同样地访问根节点->左子树->右子树... 因此可以用递归创建二叉树。
创建
用递归创建二叉树时,按照前序遍历输入数据,并且叶子节点用一个特殊符号表示(这里我用-1表示)。比如以下二叉树可以输入为:1 -1 2 3 -1 -1 -1
无入参有返回值的创建
这里我使用一级指针创建二叉树,二级指针创建的方式用visual studio Code运行会报错(有朋友知道为什么的请指教~)
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* creatTree() // 无参创建,函数的返回值是节点指针
{
int num;
scanf("%d", &num);
struct TreeNode* node = NULL; // 先创建一个节点
if (num != -1) {
struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node->val = num;
node->left = creatTree();
node->right = creatTree();
return node; // 最后返回根节点
} else {
node = NULL;
return NULL; // 返回NULL,给节点的左右孩子赋值
}
}
int main()
{
struct TreeNode* root = NULL;
root = creatTree();
int returnSize = 0;
int* a = preorderTraversal(root, &returnSize);
for (int i = 0; i < returnSize; i++) {
printf("%d ", a[i]);
}
}
有入参有返回值的创建
struct TreeNode {
int val;
str