二叉树级顺序遍历 LeetCode

Posted

技术标签:

【中文标题】二叉树级顺序遍历 LeetCode【英文标题】:Binary Tree Level Order Traversal LeetCode 【发布时间】:2017-05-12 14:33:27 【问题描述】:

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

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

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;

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

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

感谢任何帮助。

【问题讨论】:

【参考方案1】:

此时:

  if(q.front()!=NULL)

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

【讨论】:

以上是关于二叉树级顺序遍历 LeetCode的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 987:二叉树的垂直顺序遍历:为啥我得到 TLE?

leetcode-102二叉树的层序遍历

LeetCode 102 Binary Tree Level Order Traversal(二叉树的层级顺序遍历)(*)

根据二叉树遍历结果重构二叉树(前序遍历+中序遍历 / 中序遍历+后序遍历 / LeetCode真题)

根据二叉树遍历结果重构二叉树(前序遍历+中序遍历 / 中序遍历+后序遍历 / LeetCode真题)

根据二叉树遍历结果重构二叉树(前序遍历+中序遍历 / 中序遍历+后序遍历 / LeetCode真题)