层次遍历去判断是否为完全二叉树

int LevelOrderToCBT(ptree root){ //层次遍历去判断是否为完全二叉树
    if(!root) return 0;
    queue q;
    q.push(root);
    ptree cur; //ptree是二叉树结点指针
    while(!q.empty()){
        cur=q.front();
        q.pop();
        if(!cur) break; //访问到第一个空指针退出
        q.push(cur->l);
        q.push(cur->r);
    }
    while(!q.empty()){ //判断是否有结点未被访问
        cur=q.front();
        q.pop();
    if(cur) return 0;
    }
    return 1;
}

递归交换孩子结点

void SwapTree(ptree root){ //递归交换孩子结点
    if(!root) return;
    if(root->l||root->r){
        ptree temp;
        temp=root->l;
        root->l=root->r;
        root->r=temp;
        SwapTree(root->l);
        SwapTree(root->r);
    }
}

寻找父亲结点

void FParent(ptree root,char ch,int *flag){ //寻找父亲结点 
    if(root && !flag){
        ptree left=root->l;
        ptree rigt=root->r;
        
        if(left && left->data==ch || rigt&& rigt->data==ch){
        *flag=1; 
        cout>>root->data;
        } else {
        FParent(left,ch,flag);
        FParent(rigt,ch,flag);
        }
    }
}