//先序遍历下的第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); } } }