先存个图,方便看懂。。
为了方便查找数据,可以把大于节点值的数存放在右节点处,小于该节点的存放在他的左节点。存个代码方便直接用。
#includeusing 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就会卡住,所以这个暂时少用,直接用结构体那个二叉树。(可能遍历的时候递归太多?)
#includeusing 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->val right; }else return node; } if(emm->val>num){ emm->left=newnode; return node; }else if(emm->val right=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 这个能正常使用



