本文共 1100 字,大约阅读时间需要 3 分钟。
void LayerOrder(BTreeNode *t){ //利用队列实现层次遍历,每次访问根结点,然后一次放入左结点和右结点(如果有的话)。 if(t == NULL)return ; queueq; BTreeNode *temp; q.push(t); while(!q.empty()){ temp = q.front(); q.pop(); cout< data<<' '; if(temp->lchild != NULL)q.push(temp->lchild); if(temp->rchild != NULL)q.push(temp->rchild); } }
层次遍历,需要额外O(N)的空间队列临时存储。
void morris_inorder(BiTree T) { BNode *p, *temp; p = T; while(p) { if(p->left == NULL) { printf("%4c", p->ch); p = p->right; } else { temp = p->left; //找到左子树的最右子节点 while(temp->right != NULL && temp->right != p) { temp = temp->right; } if(temp->right == NULL) { temp->right = p; p = p->left; } else { printf("%4c", p->ch); temp->right = NULL; p = p->right; } } }}Morris中序遍历,只需要两个临时节点空间
void inOrder_traverse_recur(BiTree T) { if(T == NULL) { return; } else { inOrder_traverse_recur(T->left); printf("%4c", T->ch); inOrder_traverse_recur(T->right); }}递归中序遍历,需要栈空间
转载地址:http://vnlgb.baihongyu.com/