无法使用非递归顺序方法遍历二叉树
Cannot traverse a binary tree with non-recursive inorder method
我正试图遍历一个用键盘输入数据构建的二进制树。数据已成功插入到二进制树中。我有一个switch语句,其中"case 3"应该使用非递归Inorder遍历算法遍历(并打印)二进制树。然而,当调用"case 3"时,它会给出EXC_BAD_ACCESS错误,这对我来说毫无意义。如果有人帮我解决这个问题,我会非常高兴。
(RootPtr是全局定义的二进制树的顶级0节点;GetNodeS基本上是用于类型StackPtr指针的初始化函数(使用malloc)。)
提前谢谢大家。
以下是相关代码:
这些是结构定义,
Typedef struct treeItem
{
int data;
struct treeItem *left;
struct treeItem *right;
}Tree , *TreePtr;
typedef struct stackItem
{
TreePtr t;
struct stackItem *next;
}Stack , *StackPtr;
这些是推送和弹出功能,
void PushS (TreePtr TreePointer)
{
StackPtr TemPtr;
GetNodeS(&TemPtr);
(*TemPtr).t = TreePointer;
(*TemPtr).next = S;
S = TemPtr;
}
void PopS(TreePtr TreePointer)
{
StackPtr TemPtr;
GetNodeS(&TemPtr);
if (S != NULL)
{
TreePointer = (*S).t;
TemPtr = S;
S = (*S).next;
FreeNodeS(TemPtr);
}
else
printf("nEmpty stack!");
}
这是遍历函数,
void iterative (TreePtr TemPtr)
{
DONE = 0;
TemPtr = RootPtr;
S = NULL;
if(items==0)
{
printf("nTree is empty.nn");
DONE = 1;
}
else
{
printf("nIterative nonrecursive inorder traversal:");
while (DONE == 0)
{
if(TemPtr != NULL)
{
PushS(TemPtr);
TemPtr = (*TemPtr).left;
}
else
if(S != NULL)
{
PopS(TemPtr);
printf(" %d", (*TemPtr).data); //the line I get the ERROR
TemPtr = (*TemPtr).right;
}
else
{
DONE = 1;
}
}
}
}
这就是我试图调用迭代遍历函数的切换情况
case 3:
TreePtr TemPtr;
GetNode(&TemPtr);
iterative(TemPtr);
break;
您正在取消引用得到错误的行上的空指针。这就是EXC_BAD_ACCESS错误的原因。
if(TemPtr != NULL)
{
...
}
else // TemPtr must be NULL here
CCD_ 1不改变CCD_ 2,因为它是通过值传递的。
然后在这里:
printf(" %d", (*TemPtr).data);
*TemPtr
是一个空指针解引用。
相关文章:
- C++:使用方法调用析构函数的顺序是什么?
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- CPP 继承虚拟方法解析顺序
- 以随机可重现的顺序生成非重复字节的快速方法
- 在 C++ 中,以相反顺序排序的最快方法是什么?
- 通过调试来检查C 中单行表达式执行顺序的方法
- 约束模板参数顺序的更简单方法
- 编写链接函数的更短/更有效的方法,该函数按字典顺序添加新元素
- 是否有一种可接受的运行线程或按顺序执行的方法
- 正确的方法或设计模式,以简化类中的“operatorX”函数,以按给定顺序比较相同类型的属性
- 一种根据输入的顺序分组输入的方法
- 在C std :: Priority_queue中反向字母排序顺序的简单方法
- 按特定顺序扩展可变参数模板值的最有效方法是什么?
- 具有类层次结构时按什么顺序调用方法
- vfptr中的Visual C++方法的顺序相反
- 方法链接中的C++执行顺序
- 顺序蒙特卡罗方法(粒子过滤器)的实现
- 类中方法声明的顺序是否对编译器很重要
- 无法使用非递归顺序方法遍历二叉树