递归建立二叉树
1、简言
最近秋招面试,发现有的公司考察二叉树方面的算法题时需要自己建立二叉树,因此写一下建立二叉树的步骤回忆一下。
2、思路
首先需要写出二叉树的结点结构:
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
//列表初始化
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
其次递归建树:
- 函数返回值:返回建好的树根结点
- 函数参数:无,建树不需要参数(如果不需要通过传入数组建树的话)
- 函数体:首先输入根节点的值。然后开辟根节点。左右子树继续递归建树,递归出口就是输入结点值是-1时返回上一层。
TreeNode* createBinaryTree(){
int val;
cin >> val;
if(val == -1){
return NULL;
}
TreeNode *root = new TreeNode(val);
root->left = createBinaryTree();
root->right = createBinaryTree();
return root;
}
3、完整代码
#include <iostream>
using namespace std;
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
//列表初始化
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
//递归建立二叉树
TreeNode* createBinaryTree(){
int val;
cin >> val;
if(val == -1){
return NULL;
}
TreeNode *root = new TreeNode(val);
root->left = createBinaryTree();
root->right = createBinaryTree();
return root;
}
//先序遍历打印二叉树
void preorder(TreeNode *root){
if(root == NULL){
return;
}
cout << root->val << " ";
preorder(root->left);
preorder(root->right);
}
int main()
{
TreeNode *root = createBinaryTree();
preorder(root);
return 0;
}
数据结构和算法 文章被收录于专栏
该专栏内容包含常见的数据结构和一些算法知识。若有错误请各位指正。 //里面所有代码均通过vscode调试。