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;
}
}
}
... {
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