#include<iostream> #include<stdlib.h> using namespace std; struct TreeNode { int value; TreeNode *left; TreeNode *right; }; TreeNode *creatTree(TreeNode* p) { p = (TreeNode*)malloc(sizeof(TreeNode)); p->value =0; p->left = NULL; p->right = NULL; return p; } TreeNode *insert(TreeNode *t,int n) { if (t==NULL) { t=creatTree(t); t->value=n; return t; } if (n<t->value) { t->left=insert(t->left,n); return t; } else if(n>t->value) { t->right=insert(t->right,n); return t; } return t; } void find(TreeNode *t,int a,int b) { if(t==NULL) { return; } if(t->value<=a) { find(t->right,a,b); } else if(t->value>=b) { find(t->left,a,b); } else { find(t->left,a,b); cout<<t->value<<" "; find(t->right,a,b); } } int main() { int n,a,b,value; cin>>n; TreeNode *root = NULL; for(int i=0;i<n;i++) { cin>>value; insert(root,value); } cin>>a>>b; find(root,a,b); cout<<endl; return 0; }为什么不能从标准输入中输入一组整数构造一棵二叉树(二叉查找树),有序输出该查找树中所有大于a且小于b的元素。?
时间: 2024-02-23 20:56:02 浏览: 49
使用include <iostream>时一定要加using namespace std
这段代码存在一个问题,即在insert函数中,传入的是指针t的副本,而不是指针t本身。所以在递归调用时,无法更新原始的指针t,导致构建的二叉树为空。解决这个问题的方法是将insert函数的参数改为指向指针的指针,即TreeNode **t。同时,在调用insert函数时,需要传入指向指针的指针的地址,即&root。
阅读全文