您的位置:首页 > 其它

O(1)空间复杂度删除一棵二叉树

2008-06-01 21:48 246 查看
O(1)空间复杂度删除一棵二叉树
删除一棵二叉树,不能递归,不能用栈,空间复杂度必须为O(1).其思想是利用每个节点的左指针,将后序遍历中需要压入栈的节点就地连成一个链式栈。


DeleteBtree(Node* head)




...{


 Node *stack = NULL;


 Node *p = head->left,q;


 head->left = stack;


 stack = head;


 while(stack != NULL)




 ...{


  while(p != NULL)




  ...{


   q = p;


   p = q->left;


   q->left = stack;


   stack = q;


  }


  p = stack;


  if(p->right != NULL)




  ...{


   q = p;


   p = q->right;


   q->right = NULL;  // 右子树已经访问完


  }


  else




  ...{


   stack = p->left;


   free(p);


   p = NULL;


  }


 }


}



 
引用:http://blog.csdn.net/fisher_jiang/archive/2008/05/15/2448939.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  null
相关文章推荐