【发布时间】:2016-07-17 15:18:39
【问题描述】:
我尝试编写以下方法以递归方式将节点插入二叉树。该策略基本上是在任何 NULL 左或右指针中插入节点。
typedef struct BinaryTreeNode {
int data;
BinaryTreeNode * left;
BinaryTreeNode * right;
} BinaryTreeNode;
void InsertElementInBinaryTree(BinaryTreeNode *root, BinaryTreeNode *element) {
if(root) {
if(root -> left == NULL) root -> left = element;
else if(root -> right == NULL) root -> right = element;
InsertElementInBinaryTree(root -> left, element);
InsertElementInBinaryTree(root -> right, element);
}
}
方法在main函数中调用如下
InsertElementInBinaryTree(&root , new BinaryTreeNode{8, NULL,NULL});
问题是这个调用总是返回一个分段错误错误,所以我相信错误是在递归中?
【问题讨论】:
-
当使用动态结构(如链表和树)时,您必须使用 malloc() 在堆上保留存储空间,然后才能存储任何数据。您还必须在应用程序退出之前 free() 它,否则重复使用您的应用程序将导致所有堆内存无法使用。
标签: c++ pointers recursion binary-tree