//先序遍历下的第k个结点
int preorder(BTNode *t,int k,int n){
int result;
if(t==null) return 0;
if(n==k) return t->data;
result=preorder(t->lchild,k,n+1);
if(result!=0) return result;
else{
return preorder(t->rchild,k,n+1);
}
}
//先序中序 非递归
//中序遍历下的第k个结点
//中序遍历的第k个结点
int count=0;
BTNode InOrder(BTNode *t,int k,int n){
if(t==null && k<0) return null;
BTNode target=null;
if(t->lchild!=null){
target=InOrder(t->lchild,k,n+1);
}
count++;
if(target==null){
if(count==k){
target=t;
return target;
}
}
if(target==null && t->rchild!=null){
target=InOrder(t->rchild,k,n+1);
}
return target;
}
//求二叉树中值为x的层号
void NodeLevel(BTNode *t,int x,int &h,int temp_h){//当前层次
if(t==null) h=0;
else if(t->data==x) h=temp_h;
else{
Node7h(t->lchild,x,h,temp_h+1);
if(h==0){
NodeLevel(t->rchild,x,h,temp_h+1);
}
}
}
//删除一颗二叉树
void deleteTree(BTNode *t){
if(t==null) return;
else{
deleteTree(t->lchild);
deleteTree(t->rchild);
free(t);
}
}
//交换左右子树
void swapChild(BTNode *t,BTNode *t1){
if(t==null) t1=null;
else{
t1=(BTNode*)malloc(sizeof(BTNode));
t1->data=t->data;
swapChild(t->lchild,t1->rchild);
swapChild(t->rchild,t1->lchild);
}
}
//非递归 不新建结点
void swapChild(BTNode *t){
if(t==null) return;
InitStack(S);
push(&s,t);
BTNode *p;
while(!isEmpty(s)){
t=pop(&s);
p=t->lchild;
t->lchild=t->rchild;
t->rchild=p;
if(t->rchild!=null){
push(&s,t->rchild);
}
if(t->lchild!=null){
push(&s,t->lchild);
}
}
}