📌  相关文章
📜  按级别顺序插入二叉树(1)

📅  最后修改于: 2023-12-03 15:10:09.356000             🧑  作者: Mango

按级别顺序插入二叉树

二叉树是一种重要的数据结构,它可以用于很多场合,如搜索、排序等。按级别顺序插入二叉树是一种常见的操作,它可以保证二叉树的平衡性,便于后续的操作。

算法描述

按级别顺序插入二叉树的算法可以描述为:

  1. 新建一个二叉树节点,将数据插入到节点中。
  2. 如果二叉树为空,则将此节点作为根节点。
  3. 否则,从根节点开始,找到一个空节点,将此节点插入其中。
  4. 重复步骤3,直到节点插入成功。
代码实现

按级别顺序插入二叉树的核心在于如何找到一个空节点。为了实现这个功能,我们可以使用队列来辅助实现。具体实现如下:

class TreeNode {
public:
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

void Insert(TreeNode* root, int val) {
    TreeNode* node = new TreeNode(val);
    if (root == nullptr) {
        root = node;
        return;
    }
    queue<TreeNode*> q;
    q.push(root);
    while (!q.empty()) {
        TreeNode* cur = q.front();
        q.pop();
        if (cur->left == nullptr) {
            cur->left = node;
            return;
        } else {
            q.push(cur->left);
        }
        if (cur->right == nullptr) {
            cur->right = node;
            return;
        } else {
            q.push(cur->right);
        }
    }
}

在这段代码中,我们首先新建一个节点,并将数据插入其中。如果二叉树为空,则将此节点作为根节点。否则,我们使用队列来逐层遍历二叉树。我们从队列中取出一个节点cur,如果cur的左右子节点都不为空,我们就将它们加入队列中。否则,我们将node插入到cur的左右子节点中,然后退出循环。如果一直没有找到空节点,则说明插入失败。