找线索二叉树的前驱和后继
Find_pre(TElemType p){//找结点p的前驱q
TElemType q;
if(p->ltag==1)
q = p->lchild;
else{
q = p->lchild;
while(q->rtag==0)
q = q->rchild;
}
}
Find_post(TElemType p){//找结点p的后继q
TElemType q;
if(p->rtag==1)
q = p->rchild;
else{
q = p->rchild;
while(q->ltag==0)
q = q->lchild;
}
}
二叉树的非递归
#include <stdio.h>
#include <stdlib.h>
//typedef enum { false, true } bool;
typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
int flag;
};
/*------堆栈的定义-------*/
typedef Position SElementType;
typedef struct SNode *PtrToSNode;
struct SNode {
SElementType Data;
PtrToSNode Next;
};
typedef PtrToSNode Stack;
/* 裁判实现,细节不表 */
Stack CreateStack();
bool IsEmpty( Stack S );
bool Push( Stack S, SElementType X );
SElementType Pop( Stack S ); /* 删除并仅返回S的栈顶元素 */
SElementType Peek( Stack S );/* 仅返回S的栈顶元素 */
/*----堆栈的定义结束-----*/
BinTree CreateBinTree(); /* 裁判实现,细节不表 */
void InorderTraversal( BinTree BT );
void PreorderTraversal( BinTree BT );
void PostorderTraversal( BinTree BT );
int main()
{
BinTree BT = CreateBinTree();
printf("Inorder:"); InorderTraversal(BT); printf("\n");
printf("Preorder:"); PreorderTraversal(BT); printf("\n");
printf("Postorder:"); PostorderTraversal(BT); printf("\n");
return 0;
}
/* 你的代码将被嵌在这里 */
void InorderTraversal( BinTree BT ){
Stack S;
S = CreateStack();
BinTree p =BT;
while(p!=NULL||!IsEmpty(S)){
if(p!=NULL)
{
Push(S,p);
p = p->Left
}
else{
p = Pop(S);
printf(" %c",p->Data);
p = p->Right;
}
}
}
void PreorderTraversal( BinTree BT ){
Stack S;
SElementType p = BT;
S = CreateStack();
while(!IsEmpty(S)||p){
if(p!=NULL){
Push(S,p);
printf("%c ",p->Data);
p = p->Left;
}
else{
p = Pop(S);
p = p->Right;
}
}
}
void PostorderTraversal( BinTree BT ){
Stack S;
SElementType p = BT;
S = CreateStack();
while(p!=NULL||!IsEmpty(S)){
if(p!=NULL)
{
p->flag=1;
Push(S,p);
p = p->Left;
}
else{
p = Pop(S);
int f= p->flag;
if(f==1){
p->flag=2;
Push(S,p);
p = p->Right;
}
else{
printf(" %c",p->Data);
p = NULL;
}
}
}
}
最后的话
非递归是某个大佬的代码,又是忘记大佬博客地址的一天-_-|||骚瑞~
仅用于学习记录和参考