樹的三種遍歷方式(C語言實現)
阿新 • • 發佈:2018-11-16
//************************************************************************* // 【前序】遍歷演算法 //二叉樹不空,先訪問根結點,然後前序遍歷左子樹,再前序遍歷右子樹 //************************************************************************* void PreOrderTraverse(BiTree T) { if(T == NULL) /* 遞迴跳出條件*/ return; printf("%c", T ->data); /*對結點進行操作(可替換成其它操作)*/ PreOrderTraverse(T ->lchild); /* 先序遍歷左子樹*/ PreOrderTraverse(T ->rchild); /* 先序遍歷右字樹*/ } //************************************************************************* // 【中序】遍歷演算法 //二叉樹不空,從根結點開始(並非是先訪問根結點),中序遍歷根節點的左子樹, //然後訪問根結點,最後中序遍歷該根結點的右子樹 //*************************************************************************void InOrderTraverse(BiTree T) { if(T == NULL) /* 遞迴跳出條件*/ return; InOrderTraverse(T ->lchild); /* 中序遍歷左子樹*/ printf("%c", T ->data); /* 對結點進行操作(可替換成其它操作)*/ InOrderTraverse(T ->rchild); /* 中序遍歷右字樹*/ }//************************************************************************* // 【後序】遍歷演算法 //二叉樹不空,從左到右先葉子後結點的方式遍歷左右子樹,最後遍歷根結點 //************************************************************************* void PostOrderTraverse(BiTree T) { if(T == NULL) /* 遞迴跳出條件*/ return; PostOrderTraverse(T ->lchild); /* 後序遍歷左子樹*/ PostOrderTraverse(T ->rchild); /* 後序遍歷右字樹*/ printf("%c", T ->data); /* 對結點進行操作(可替換成其它操作)*/ }