Loading

C++ 根据层序遍历数组 构造二叉树

说明

该层序遍历数组中空节点会使用-1代替,即该层序遍历数组可以理解为一个完全二叉树

代码

利用队列实现左右子节点的存储,每次通过获取队列头部元素即为当前头节点,然后在数组中i和i+1对应该头结点下的左右子节点,如果不为-1,那么说明可以入队。

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

TreeNode* BuildTree(vector<int>& tree)
{
  if(tree.empty()) return nullptr;
  TreeNode* root = new TreeNode(tree[0]);
  queue<TreeNode*> q
  q.push(root);

  int next = 1;
  while(next < tree.size())
  {
    TreeNode* cur = q.front();
    q.pop();
    
    if(next < tree.size() && tree[next] != -1)
    {
      cur->left = new TreeNode(tree[next]);
      q.push(cur->left);
    }  
    next++;
    if(next < tree.size() && tree[next] != -1)
    {
      cur->right = new TreeNode(tree[next]);
      q.push(cur->right);
    }  
    next++;
  }

  return root;
}
posted @ 2024-08-08 20:14  XTG111  阅读(150)  评论(0)    收藏  举报