数据结构教学课件:第六讲2二叉树

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if ( current != NULL ) { PostOrder ( current→leftChild ); PostOrder ( current→rightChild ); cout << current→data;
} }
非递归的二叉树前序遍历
void preOrder(TNode *root) { Stack st; while((root != NULL) || !st.empty())
Stack s; while(root != NULL || !s.empty())
{ while(root!=NULL) //找到左子树 { s.push(root); //先入栈,沿左走到底 root = root->left; } if(!s.empty()) { root = s.pop(); //再访问 visit(root); root = root->right; //遍历右子树 }
if ( current != NULL ) { InOrder ( current->leftChild ); cout << current -> data; InOrder ( current -> rightChild );
} }
中序遍历二叉树的递归过程图解
前序遍历 (Preorder Traversal)
} }
前序遍历二叉树算法的框架是 若二叉树为空,则空操作; 否则
访问根结点 (V); 前序遍历左子树 (L); 前序遍历右子树 (R)。
遍历结果
-+a*b-cd/ef

二叉树递归的前序遍历算法
PreOrder ( BinTreeNode *current ) {
if ( current != NULL ) { cout << current→data; PreOrder ( current→leftChild ); PreOrder ( current→rightChild );
} }
typedef struct {
BiTNode *ptr; int tag;//0,1 }SElemType;
typedef struct BiTNode {
TElemType data; BiTNode *lchild,*rchild; }BiTNode,*BiTree;
void PostOrder(BiTree bt) {
二叉树遍历 (Binary Tree Traversal)
所谓树的遍历,就是按某种次序访问树中 的结点,要求每个结点访问一次且仅访问一次。
设访问根结点记作 V 遍历根的左子树记作 L 遍历根的右子树记作 R
则可能的遍历次序有 前序 VLR 镜像 VRL 中序 LVR 镜像 RVL 后序 LRV 镜像 RLV
{ if(root!=NULL) {
visit(root); //先访问再入栈 st.push(root); root = root->left;//往左走到底 } else { root = st.pop();//出栈后向右走 root = root->right;
}
} }
非递归中序
void inOrder(TNode* root) {
} }
后序遍历 (Postorder Traversal)
后序遍历二叉树算法的框架是 若二叉树为空,则空操作; 否则
后序遍历左子树 (L); 后序遍历右子树 (R); 访问根结点 (V)。
遍历结果
abcd-*+ef/-
二叉树递归的后序遍历算法
PostOrder ( BinTreeNode *current ) {
Stack S; InitStack(S); SElemType p; p.ptr=bt; p.tag=0; while(p.ptr||!StackEmpty(S)) {
if(p.ptr&&!p.tag) {
push(S,p); p.ptr=p.ptr->lchild; p.tag=0; }
else { Pop(S,p); if(p.ptr->rchild&&!p.tag) { p.tag=1; Push(S,p); p.ptr=p.ptr->rchild; p.tag=0; } else { visit(p.ptr->data); p.ptr=NULL; } }
中序遍历 (Inorder Traversal)
中序遍历二叉树算法的框架是: 若二叉树为空,则空操作; 否则
中序遍历左子树 (L); 访问根结点 (V); 中序遍历右子树 (R)。
遍历结果
a+b*c-d-e/f
表达式语法树
二叉树递归的中序遍历算法
InOrder ( BinTreeNode *current ) {
相关文档
最新文档