c++ - 二叉树层序遍历 LeetCode

标签 c++ binary-tree tree-traversal

好吧,这一题来自 LeetCode。问题是找到树的最后一层最左边的节点。我通过保留一个额外的指针来跟踪每个级别的第一个元素(当然是最左边的元素),使用简单的级别顺序遍历对其进行了尝试。

虽然代码在我的机器上运行得很好。它在 leetcode judge 中显示了不同的输出。这是我的代码

int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*>q;
q.push(root);
q.push(NULL);
TreeNode*first;

while(!q.empty())
{
   TreeNode*temp = q.front();
   q.pop();
   if(temp==NULL)
   {
     if(q.front()!=NULL)
       first = q.front();
     if(!q.empty())
        q.push(NULL);
    }
    else
    {
      if(temp->left)
      {
        q.push(temp->left);
      }
      if(temp->right)
      {
         q.push(temp->right);
      }
     }
    }
    return first->val;
}

问题的详 segmentation 析请访问https://leetcode.com/problems/find-bottom-left-tree-value/#/description

对于给定的测试用例 [2,1,3],我的代码给出的输出是 0,而正确的输出是 1。

感谢任何帮助。

最佳答案

此时:

  if(q.front()!=NULL)

您不知道队列中是否有任何内容。在使用 q.front() 之前,您应该使用 q.empty() 进行测试。因此,您的程序表现出未定义的行为。

关于c++ - 二叉树层序遍历 LeetCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43940309/

相关文章:

c++ - 声明不兼容

c++ - 不同数据结构的速度/内存使用估计

c++ - 需要简单的 C++ 递归解释

c++ - 二叉树的层序遍历

data-structures - Euler Tour算法和前序遍历本质上是一样的吗?

c++ - 编写一个简单的解析器

c++ - 如何制作类函数的外部线程

binary-tree - 完美平衡二叉树的复杂度

c++ - 如何循环访问具有两个节点的链接节点

c# - 如何知道从 C++ dll 传递到 C# 的数组的大小