一、翻转二叉树
int reverse(BiTree T){
if(T!=NULL){
swap(T.left,T.right);
reverse(T->left);
reverse(T->right);
}
}
二、判断两颗二叉树的形状是否相似
bool similar(BiTree T1,BiTree T2){
if(T1==NULL%%T2==NULL) return true;
else if(T1==NULL||T2=NULL) return false;
else return similar(T1->left,T2->left)&&similar(T1->right,T2->right);
}
三、递归建树/根据先序、中序、后序
105
struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){
struct TreeNode* root=(struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val=preorder[0];
root->left=NULL;
root->right=NULL;
int i=0;
for(;inorder[i]!=root->val;i++) ;
int left=i;int right=inorderSize-1-i;
if(left!=0) root->left=buildTree(preorder+1,left,inorder,left);
else root->left==NULL;
if(right!=0) root->right=buildTree(preorder+1+left,right,inorder+1+left,right);
else root->right=NULL;
return root;
}
106
struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize){
struct TreeNode* root=(struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val=postorder[postorderSize-1];
root->left=NULL;
root->right=NULL;
int i=0;
for(;inorder[i]!=root->val;i++) ;
int left=i;int right=inorderSize-1-i;
if(left!=0) root->left=buildTree(inorder,left,postorder,left);
else root->left==NULL;
if(right!=0) root->right=buildTree(inorder+left+1,right,postorder+left,right);
else root->right=NULL;
return root;
}