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;
}
}
}
相关文章推荐
- O(1)空间复杂度删除一棵二叉树
- O(1)空间复杂度删除一棵二叉树
- C++删除单链表值为K的结点空间复杂度O(1)
- 时间复杂度O(n)空间复杂度O(1)打印二叉树前中后序
- 长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为X的元素
- 【算法】二叉树的非递归遍历的简洁写法/迭代器实现/O(1)空间复杂度的Morris遍历
- 二叉树的销毁(O(1)空间复杂度)
- 时间复杂度O(n)空间复杂度O(1)打印二叉树前中后序
- 删除字符串中的连续空格(只保留一个),O(n)时间复杂度,O(1)空间复杂度
- 时间复杂度O(n)空间复杂度O(1)打印二叉树前中后序
- 二叉树的前序遍历的时间复杂度和空间复杂度
- 时间复杂度O(n)空间复杂度O(1)打印二叉树前中后序
- 数据结构之 删除顺序表中所有元素为X 的元素,要求时间复杂度为O(n),空间复杂度为O(1)
- 从顺序表中删除所有元素值为x的元素,要求空间复杂度为O(1)
- 二叉树建立/遍历/复制/映像/节点删除/释放空间
- 时间复杂度O(n)空间复杂度O(1)打印二叉树前中后序
- 《数据结构》2.10设计一个算法,删除顺序表中值为item的元素,要求算法的时间复杂度是O(n),空间复杂度是O(1)
- 二叉树的时间复杂度和空间复杂度
- 时间复杂度O(n)空间复杂度O(1)打印二叉树前中后序
- 不用递归,空间复杂度为1的中序遍历二叉树