0
点赞
收藏
分享

微信扫一扫

剑指 Offer II 043. 往完全二叉树添加节点

王小沫 2022-04-13 阅读 88

在这里插入图片描述
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
}

举报

相关推荐

0 条评论