考研笔试之数据结构必背算法(二)
二叉树的先序递归:
void preorder(BiTree T){ if (T!=NULL){ visit(t); preorder(T->lchild); preorder(T->rchild); } }
二叉树的中序递归:
void preorder(BiTree T){ if (T!=NULL){ preorder(T->lchild); visit(t); preorder(T->rchild); } }
二叉树的后序递归:
void preorder(BiTree T){ if (T!=NULL){ preorder(T->lchild); preorder(T->rchild); visit(t); } }
二叉树先序非递归:
void preorder2(BiTree T){ initstack(s); BiTree p=T; while(p||Isempty(s)){ if(p){ push(s,p); visit(p); P=P->lchild; } else{ pop(s,p); p=p->rchild; } } }
二叉树中序非递归:
void inorder2(BiTree T){ initstack(s); BiTree p=T; while(p||Isempty(s)){ if(p){ push(s,p); P=P->lchild; } else{ pop(s,p); visit(p); p=p->rchild; } } }
二叉树后序非递归:
void postorder2(BiTree T){ initstack(s); BiTree p=T; r=NULL; //r表示记录上一个被访问的节点 while(p||Isempty(s)){ if(p){ push(s,p); P=P->lchild; } else{ Gettop(s,p); if(p->rchild && p->child != r){ p=p->rchild; push(s,p); p=p->lchild; } else{ pop(s,p); visit(p); r=p; //更新 p=NULL; //把p置为空,因为p被访问过 } } } }
层次遍历:
void leveorder2(BiTree T){ initqueue(q); BiTree p=T; enqueue(q,p); while(!Isempty(q)){ dequeue(q,p); visit(p); if(p->lchild != NULL) enqueue(q,p->lchild); if(p->rchild != NULL) enqueue(q,p->rchild); } }
上一篇:
Java基础知识总结(2021版)