1.二叉树中序非递归实现
#include<stdio.h>#include<stdlib.h>#define MaxSize 100typedef struct TreeNode * ElementType;typedef struct SNode *Stack;struct TreeNode{int Data;struct TreeNode *Left;struct TreeNode *Right;};struct SNode{ElementType Data[MaxSize];int Top;};Stack S;struct TreeNode * CreateBinTree(void);Stack CreateStack();bool IsFull(Stack S);bool IsEmpty(Stack S);void Push(Stack S,ElementType item);ElementType Pop(Stack S);void InOrderTraversal(struct TreeNode * BT);int main(void){struct TreeNode *pT = CreateBinTree();printf("二叉树非递归遍历:\n");InOrderTraversal(pT);free(pT);return 0;}struct TreeNode * CreateBinTree(void){struct TreeNode *pA = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pB = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pC = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pD = (struct TreeNode *)malloc(sizeof(TreeNode));struct TreeNode *pE = (struct TreeNode *)malloc(sizeof(TreeNode));pA->Data = 5;pB->Data = 6;pC->Data = 7;pD->Data = 8;pE->Data = 9;pA->Left = pB;pA->Right = pC;pB->Left = NULL;pB->Right = NULL;pC->Left = pD;pC->Right = NULL;pD->Left = NULL;pD->Right = pE;pE->Left = NULL;pE->Right = NULL;return pA;}Stack CreateStack(){S = (Stack)malloc(sizeof(struct SNode));S->Top = -1;return S;}bool IsFull(Stack S){return (S->Top == MaxSize-1);}bool IsEmpty(Stack S){return (S->Top == -1);}void Push(Stack S,ElementType item){if(IsFull(S)){printf("堆栈满");return;}else{S->Top++;S->Data[S->Top] = item;return;}}ElementType Pop(Stack S){if(IsEmpty(S)){printf("堆栈空");return NULL;}else{ElementType val = S->Data[S->Top];S->Top--;return val;}}void InOrderTraversal(struct TreeNode * BT){struct TreeNode * T = BT;Stack S = CreateStack();while(T || !IsEmpty(S)){while(T){Push(S,T);T = T->Left;}if(!IsEmpty(S)){T = Pop(S);printf("%d\n", T->Data);T = T->Right;}}}
2.KMP算法
