定义二叉树的结点类型
struct TreeNode{ int val; TreeNode *left; TreeNode *right; };
层次遍历建树
TreeNode*create() { int front=1,rear=0,x; TreeNode*qu[1005],*t,*root=NULL; while(cin>>x,x!=-1) { if(!x) t=NULL; else { t=new TreeNode; t->val=x; t->left=NULL; t->right=NULL; } qu[++rear]=t; if(rear==1) root=t; else { if(qu[front]&&t) { if(rear%2==0) qu[front]->left=t; else qu[front]->right=t; } if(rear%2==1) front++; } } return root; }
二叉搜索树的建树
ps:
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
① 若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
② 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
③ 左、右子树也分别为二叉排序树;
TreeNode*dfsBST(TreeNode*root,int x) { if(!root) { root=new TreeNode; root->val=x; root->left=NULL; root->right=NULL; } else if(x> root->val) root->right=dfsBST(root->right,x); else if(x<= root->val) //其实没有=的情况 root->left=dfsBST(root->left,x); return root; } TreeNode*createBST() { int nums[1005],Size,i; cin>>Size; for(i=0;i<Size;i++) cin>>nums[i]; TreeNode*root=NULL; for(i=0;i<Size;i++) root=dfsBST(root,nums[i]); return root; }