递归建立二叉树

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调试。

全部评论

相关推荐

昨天 11:16
湖南大学 Web前端
我看到好多人都在说0offer好焦虑,结果一看是投了百度快手字节啥的。好像大家都是只想通过校招进大厂,对小公司是不考虑的吗😂可是能进大厂的难道不是只有少部分人吗,真心发问
梦想是成为七海千秋:沉默的大多数吧,喜欢晒的都是能引起共鸣的大厂,找小厂的人,别人也不认识你这个小厂,就自己偷偷找了实际上大多数人哪有什么机会能找到大厂
点赞 评论 收藏
分享
frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务