您的位置:首页 > 其它

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

2008-05-15 16:54 246 查看
删除一棵二叉树,不能递归,不能用栈,空间复杂度必须为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;


}


}


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐