c++实现
class CBTInserter {
private:
queue<TreeNode*> que;
TreeNode* root;
public:
//构建树
CBTInserter(TreeNode* root) {
this->root = root;
//根节点进入队列
que.push(root);
while(que.front()->left != nullptr && que.front()->right != nullptr){
que.push(que.front()->left);
que.push(que.front()->right);
que.pop();
}
}
int insert(int v) {
//定义要插入的节点
TreeNode* node =new TreeNode(v);
//标记指向头节点
TreeNode* fa = que.front();
if(fa->left == nullptr){
fa->left = node;
}
else{
fa->right = node;
//当根节点为左右节点都有时,将左右节点入队列,根节点出队列
que.push(fa->left);
que.push(fa->right);
que.pop();
}
return fa->val;
}
TreeNode* get_root() {
return this->root;
}
};
golang实现
type CBTInserter struct {
root *TreeNode
queue []*TreeNode
}
func Constructor(root *TreeNode) CBTInserter {
//判断根节点是否为空
if root == nil {
return CBTInserter{nil,[]*TreeNode{}}
}
//go没有类 所有需要声明数组变量
var queue []*TreeNode
//将根节点加入队列
queue = append(queue,root)
for len(queue)>0 {
node := queue[0]
if node.Left != nil {
queue = append(queue,node.Left)
}else{
break
}
if node.Right != nil {
queue = append(queue,node.Right)
}else{
break
}
queue = queue[1:]
}
return CBTInserter{root,queue}
}
func (this *CBTInserter) Insert(v int) int {
//标记头节点
var parentVal int
parentVal = this.queue[0].Val
node := &TreeNode{Val:v}
this.queue = append(this.queue,node)
if this.queue[0].Left == nil {
this.queue[0].Left = node
}else{
this.queue[0].Right = node
this.queue=this.queue[1:]
}
return parentVal//必须定义 不能直接返回this.queue[0].Val 因为上面已经this.queue=this.queue[1:]
}
func (this *CBTInserter) Get_root() *TreeNode {
return this.root
}