首页 > 解决方案 > 为什么我的代码中存在分段错误,即从 BT 的叶节点创建 DLL?

问题描述

这是从二叉树的叶节点创建双向链表 (DLL) 的问题,我们还必须删除叶节点并返回 DLL 的头部。问题链接-https://practice.geeksforgeeks.org/problems/leaves-to-dll/1#

我正在使用堆栈使用中序遍历。当我得到一个叶节点时,将它添加到 DLL 然后删除节点。但是我遇到了分段错误。

我的代码:- Node * convertToDLL(Node *root) { if(root == NULL) return root;

  stack<Node*> st;  /* store nodes for Inorder traversal*/
  Node *temp,*prev = NULL,*curr = root,*head; /* temp,pre will be current node and previous 
         node of DLL respectively, curr will be current node while travering BT. head will 
         store first node of DLL */

  while(1)
  {
      while(curr)
      {
          st.push(curr);
          curr = curr->left;
      }
      if(st.empty())
      break;
      curr = st.top(); st.pop();  
      if(curr->left == NULL && curr->right == NULL) // check for leaf node
      {
          temp = curr;
          if(prev != NULL)
          {
              prev->right = temp;
              temp->left = prev;
          }
          else {
              temp->left = prev;
              head = temp;       // first node of DLL
          }
          prev = temp;
          free(curr);  // delete the leaf node
      }
      curr = curr->right;
  }
  temp->right = NULL;
  return head;
  }

标签: segmentation-faultbinary-tree

解决方案


推荐阅读