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;
}

作者:XTG111

出处:https://www.cnblogs.com/XTG111/p/18349643

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   XTG111  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示