LeetCode 919 完全二叉树插入器[BFS 队列] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 919 完全二叉树插入器[BFS 队列] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路
提及完全二叉树就想到BFS,因为完全二叉树的构建离不开层次遍历,首先定义好存储有空位置的节点的队列以及根节点的指针,在构造函数中,将根节点指针指向根节点,接着用BFS遍历二叉树将所有满足条件的节点全部放入存储有空位置的节点的队列中,insert函数就是处理队列的头,如果为叶子,就填充左节点,否则填充完右节点后直接pop(),同时把新节点放入队列后面,get_root函数直接返回根节点指针即可,代码如下:
代码
/**
* Definition for a binary tree node.
* struct TreeNode
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr)
* TreeNode(int x) : val(x), left(nullptr), right(nullptr)
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right)
* ;
*/
class CBTInserter
private:
TreeNode* node;
// 存储有空位置的节点
queue<TreeNode*> q;
public:
CBTInserter(TreeNode* root)
node = root;
queue<TreeNode*> temp;
temp.emplace(root);
// BFS遍历二叉树
while(!temp.empty())
int n = temp.size();
for(int i = 0; i < n; i ++)
TreeNode* tree = temp.front();
if(!(tree->left != nullptr && tree->right != nullptr))
q.emplace(tree);
if(tree->left != nullptr) temp.emplace(tree->left);
if(tree->right != nullptr) temp.emplace(tree->right);
temp.pop();
int insert(int val)
TreeNode* tree = new TreeNode(val);
TreeNode* temp = q.front();
// 叶子节点,完全二叉树,所以判断左子树即可
if(temp->left == nullptr)
temp->left = tree;
else if(temp->right == nullptr)
temp->right = tree;
q.pop();
q.emplace(tree);
return temp->val;
TreeNode* get_root()
return node;
;
/**
* Your CBTInserter object will be instantiated and called as such:
* CBTInserter* obj = new CBTInserter(root);
* int param_1 = obj->insert(val);
* TreeNode* param_2 = obj->get_root();
*/
以上是关于LeetCode 919 完全二叉树插入器[BFS 队列] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode-919 Complete Binary Tree Inserter(完全二叉树插入器)