演算法學習,演算法學習網站
樹的遍曆
這三種遍曆方法其實都很簡單的,舉例來說:
a / \b c
這個是例子下面講下這三個是如何遍曆的。
下面都是遞迴方法,非遞迴方法請看我另一篇部落格:http://blog.csdn.net/alps1992/article/details/38308285
struct TreeNode;typedef TreeNode* Node;typedef int EleType;struct TreeNode{ Node lchild; Node rchild; EleType data;};
先序遍曆
先序遍曆,就是從上到下,從左至右,遇到一個就遍曆,上面這個例子遍曆的序列就是:a b c
遞迴代碼如下:
void PreOrderTree(Node node){ if (node != NULL) { printf("%d\n",node->data); PreOrderTree(node->lchild); PreOrderTree(node->rchild); }}
中序遍曆
中序遍曆的序列:b a c 其實中序遍曆就是先從左至右,來遍曆,先找到最左的,然後找到,它的右孩子,沒有的話再找父親,輸出,最後輸出右兄弟。
代碼如下:
}void InOrderTree(Node node){ if (node != NULL) { InOrderTree(node->lchild); printf("%d\n",node->data); InOrderTree(node->rchild); }}
後序遍曆
後序遍曆的序列:a c b 其實後序遍曆就是把中序遍曆的父親在它右兄弟輸出後再輸出。
代碼如下:
<pre name="code" class="cpp">void AfterPreOrderTree(Node node){ if (node != NULL) { AfterPreOrderTree(node->lchild); AfterPreOrderTree(node->rchild); printf("%d\n",node->data); }}