先存个图,方便看懂。。
为了方便查找数据,可以把大于节点值的数存放在右节点处,小于该节点的存放在他的左节点。存个代码方便直接用。
#include
using namespace std;
#define maxn 10000000
int Binary[maxn];
bool Isempty[maxn];
void inorder(int Binary[],int num){
if(Isempty[num]){
inorder(Binary,num*2+1);
printf("%d ",Binary[num]);
inorder(Binary,num*2+2);
}
return;
}
int main()
{
int n = 0,num = 0;
cin >> n;
memset(Isempty,0,sizeof(Isempty));
for(int i = 0;i> num;
int j = 0;
while(Isempty[j]){
if(Binary[j]num){
j = 2 * j + 1;
}//二叉树不能有重复数据
}
Binary[j] = num;
Isempty[j]=true;
}
num = 0;
inorder(Binary,num);//中序遍历输出一下康康
return 0;
}
但是用数组如果连续输入1-30就会卡住,所以这个暂时少用,直接用结构体那个二叉树。(可能遍历的时候递归太多?)
#include
using namespace std;
struct TreeNode
{
int val;
struct TreeNode* left;
struct TreeNode* right;
};
//为了方便,按照左边小,右边大插入
TreeNode* putintotree(struct TreeNode* node,int num)
{
struct TreeNode* newnode = (TreeNode*) malloc(sizeof(TreeNode));
newnode->val = num;
newnode->left = NULL;
newnode->right = NULL;
if(!node){
node = newnode;
return node;
}else{
TreeNode* now = node;
TreeNode* emm = now;
while(now){
if(now->val>num){
emm = now;
now = now->left;
}else if(now->valright;
}else return node;
}
if(emm->val>num){
emm->left=newnode;
return node;
}else if(emm->valright=newnode;
return node;
}
}
return node;
}
void inorder(TreeNode* node){
if(node){
inorder(node->left);
printf("%d ",node->val);
inorder(node->right);
}
}
int main(){
int n = 0,num = 0;
scanf("%d",&n);
struct TreeNode* Node = (TreeNode*)malloc(sizeof(TreeNode));
Node = NULL;
for(int i = 0;i
这个能正常使用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)