【发布时间】:2016-04-25 21:23:08
【问题描述】:
我试图编写一个迭代破坏二叉树的代码。我知道递归要容易得多,但我想我会尝试迭代地进行(尽管主要使用 C 表示法并且只使用结构,不需要类)。我的想法是这样的:
void delete_tree (node *p_tree){
node *local_node;
node *parent;
int left_or_right;
while (p_tree->p_left != NULL || p_tree->p_right != NULL){
parent = p_tree;
if (parent->p_left != NULL){
local_node = parent->p_left;
left_or_right = 1;
} else {
local_node = parent->p_right;
left_or_right = 2;
}
while (local_node->p_left != NULL || local_node->p_right != NULL){
if (local_node->p_left == NULL){
parent = local_node;
local_node = local_node->p_right;
left_or_right = 2;
} else if (local_node ->p_right == NULL){
parent = local_node;
local_node = local_node->p_left;
left_or_right = 1;
} else {
parent = local_node;
local_node = local_node->p_left;
left_or_right = 1;
}
}
cout << "Deleting node with value: " << local_node->key_value << endl;
delete local_node;
local_node = NULL;
if (left_or_right == 1){
parent->p_left = NULL;
} else if (left_or_right == 2){
parent->p_right = NULL;
}
}
cout << "Deleting node with value: " << p_tree->key_value << endl;
delete p_tree;
p_tree = NULL;
}
我不知道我的逻辑有什么问题。它是这样的。向下遍历二叉树,直到找到一个没有子节点的节点,然后删除该节点。重复直到我们只有原始的父节点。然后最后删除。
编辑:我已根据建议更改了代码。它现在似乎可以工作并且没有无限循环,但是当我尝试打印出二叉树的内容时,该函数陷入了无限循环。我知道我的 print 函数是正确的,所以这个 delete_tree 函数肯定还是有问题。
【问题讨论】:
标签: c++ binary-tree