多叉树的后序遍历,先序遍历,及其释放操作

作者在 2011-04-01 00:53:26 发布以下内容
/************************************************************************/
/* coder:huifeng00                                                      */
/* 时间:2010-5-12 下午 9点                                             */
/* 实现:多叉树的后序遍历,先序遍历,及其释放操作                       */
/* 语言:C       工具:VC++6.0                                          */
/************************************************************************/
#include <stdlib.h>
#include <memory.h>
#include <stdio.h>

#define MAXSIZE 5//这是多叉树最多可以的分支数
typedef struct _TREENODE
{
    int data;
    int cnChild;
    struct _TREENODE *parent;
    struct _TREENODE *child[MAXSIZE];
} TREENODE, *PTREENODE;

PTREENODE InsertNode(PTREENODE *ppNode,int data)//向一个多叉树节点插入一个孩子节点
{
    int cnChild = (*ppNode)->cnChild;
    PTREENODE temp = (PTREENODE)malloc(sizeof(TREENODE));
    temp->data = data;
    temp->cnChild =0;
    temp->parent = *ppNode;
    memset(temp->child,0,MAXSIZE);
    
    (*ppNode)->child[cnChild] = temp;
    (*ppNode)->cnChild++;
    return temp;
}

void PrintTree(PTREENODE root)//递归格式化先序打印多叉树
{
    static depth = 0;
    int i;
    if (root == NULL)
    {
        return;
    }
    for (i=0;i<depth;i++)
    {
        printf(" ");
    }
    printf("%d\n",root->data);
    for (i=0;i<root->cnChild;i++)
    {
        depth++;
        PrintTree((root->child)[i]);
        depth--;
    }
}

void PrintTreelast(PTREENODE root)//递归格式化后序打印多叉树
{
    static depth = 0;
    int i;
    if (root == NULL)
    {
        return;
    }
    
    for (i=0;i<root->cnChild;i++)
    {
        depth++;
        PrintTreelast((root->child)[i]);
        depth--;
    }
    for (i=0;i<depth;i++)
    {
        printf(" ");
    }
    printf("%d\n",root->data);
}
void destroyTree(PTREENODE root)//释放多叉树节点所占内存
{
    int i;
    if (root == NULL)
    {
        return;
    }
    for (i=0;i<root->cnChild;i++)
    {
        destroyTree((root->child)[i]);
    }
    free(root);
}

int main()
{
    PTREENODE root = (PTREENODE)malloc(sizeof(TREENODE));//根节点
    PTREENODE temp1,temp2;
    root->data = 1;
    root->cnChild =0;
    root->parent = NULL;
    memset(root->child,0,MAXSIZE);
    
    
    //对根节点插入2个孩子
    temp1 = InsertNode(&root,11);
    temp2 = InsertNode(&root,12);
    
    //对第一个孩子节点插入3个孩子节点
    InsertNode(&temp1,111);
    InsertNode(&temp1,112);
    InsertNode(&temp1,113);
    
    //对第二个孩子节点插入3个孩子节点
    InsertNode(&temp2,121);
    InsertNode(&temp2,122);
    InsertNode(&temp2,123);
    
    PrintTree(root);//先序打印多叉树
    printf("*****************\n");
    PrintTreelast(root);//后序打印多叉树
    destroyTree(root);//后序释放多叉树节点
    return 0;
}
 
基础知识 | 阅读 6753 次
文章评论,共3条
vfdff(作者)
2011-04-01 01:01
1
一个简单的多叉树类, 结合双向链表实现, 不足之处请高手指点, 看代码..<br />
引用:<br />
/********************************************************************<br />
&nbsp;&nbsp;created:&nbsp;&nbsp;2009/01/09<br />
&nbsp;&nbsp;created:&nbsp;&nbsp;9:1:2009&nbsp; &nbsp;12:42<br />
&nbsp;&nbsp;author:&nbsp; &nbsp; cooldiyer<br />
&nbsp;&nbsp;site:&nbsp; &nbsp; <a href="http://www.xcodez.com/" target="_blank">http://www.xcodez.com/</a><br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;purpose:&nbsp;&nbsp;多叉树类文件<br />
*********************************************************************/<br />
<br />
#include &lt;windows.h&gt;<br />
#include &lt;stdio.h&gt;<br />
<br />
VOID<br />
FORCEINLINE<br />
InitializeListHead(<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;IN PLIST_ENTRY ListHead<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;)<br />
{<br />
&nbsp; &nbsp; ListHead-&gt;Flink = ListHead-&gt;Blink = ListHead;<br />
}<br />
<br />
#define IsListEmpty(ListHead) \<br />
((ListHead)-&gt;Flink == (ListHead))<br />
<br />
VOID<br />
FORCEINLINE<br />
RemoveEntryList(<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;IN PLIST_ENTRY Entry<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;)<br />
{<br />
&nbsp; &nbsp; PLIST_ENTRY Blink;<br />
&nbsp; &nbsp; PLIST_ENTRY Flink;<br />
&nbsp;&nbsp;<br />
&nbsp; &nbsp; Flink = Entry-&gt;Flink;<br />
&nbsp; &nbsp; Blink = Entry-&gt;Blink;<br />
&nbsp; &nbsp; Blink-&gt;Flink = Flink;<br />
&nbsp; &nbsp; Flink-&gt;Blink = Blink;<br />
}<br />
<br />
VOID<br />
FORCEINLINE<br />
InsertTailList(<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;IN PLIST_ENTRY ListHead,<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;IN PLIST_ENTRY Entry<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;)<br />
{<br />
&nbsp; &nbsp; PLIST_ENTRY Blink;<br />
&nbsp;&nbsp;<br />
&nbsp; &nbsp; Blink = ListHead-&gt;Blink;<br />
&nbsp; &nbsp; Entry-&gt;Flink = ListHead;<br />
&nbsp; &nbsp; Entry-&gt;Blink = Blink;<br />
&nbsp; &nbsp; Blink-&gt;Flink = Entry;<br />
&nbsp; &nbsp; ListHead-&gt;Blink = Entry;<br />
}<br />
<br />
<br />
VOID<br />
FORCEINLINE<br />
InsertHeadList(<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;IN PLIST_ENTRY ListHead,<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;IN PLIST_ENTRY Entry<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;)<br />
{<br />
&nbsp; &nbsp; PLIST_ENTRY Flink;<br />
&nbsp;&nbsp;<br />
&nbsp; &nbsp; Flink = ListHead-&gt;Flink;<br />
&nbsp; &nbsp; Entry-&gt;Flink = Flink;<br />
&nbsp; &nbsp; Entry-&gt;Blink = ListHead;<br />
&nbsp; &nbsp; Flink-&gt;Blink = Entry;<br />
&nbsp; &nbsp; ListHead-&gt;Flink = Entry;<br />
}<br />
<br />
<br />
typedef struct tagTREENODE<br />
{<br />
&nbsp;&nbsp;LPARAM&nbsp; &nbsp;&nbsp; &nbsp;lParam;&nbsp; &nbsp;&nbsp; &nbsp;// 关联的值<br />
&nbsp;&nbsp;int&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;cChildren;&nbsp; &nbsp; // 子节点个数<br />
&nbsp;&nbsp;LIST_ENTRY&nbsp; &nbsp; ListEntry;&nbsp; &nbsp; // 同一等级的节点<br />
&nbsp;&nbsp;LIST_ENTRY&nbsp; &nbsp; ChildListEntry;&nbsp;&nbsp;// 子节点头<br />
&nbsp;&nbsp;tagTREENODE *&nbsp;&nbsp;pParentNode;&nbsp;&nbsp;// 父节点<br />
} TREENODE, *PTREENODE;<br />
<br />
<br />
<br />
#define TN_ROOT&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; ((HTREENODE)(ULONG_PTR)-0x10000)<br />
#define TN_FIRST&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;((HTREENODE)(ULONG_PTR)-0x0FFFF)<br />
#define TN_LAST&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; ((HTREENODE)(ULONG_PTR)-0x0FFFE)<br />
typedef PTREENODE&nbsp;&nbsp;HTREENODE;<br />
<br />
<br />
class CTree<br />
{&nbsp;&nbsp;<br />
public:<br />
&nbsp;&nbsp;CTree() {<br />
&nbsp; &nbsp; m_nCount = 0;<br />
&nbsp; &nbsp; m_nRootChildCount = 0;<br />
&nbsp; &nbsp; InitializeListHead(&amp;m_ListHead);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;~CTree() {<br />
&nbsp; &nbsp; DeleteAllNodes();<br />
&nbsp;&nbsp;}<br />
<br />
private:<br />
&nbsp;&nbsp;int m_nCount;<br />
&nbsp;&nbsp;int&nbsp;&nbsp;m_nRootChildCount;<br />
&nbsp;&nbsp;LIST_ENTRY m_ListHead;<br />
<br />
public:<br />
<br />
&nbsp;&nbsp;int getCount() {<br />
&nbsp; &nbsp; return m_nCount;<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;int&nbsp;&nbsp;getChildNodeCount(HTREENODE hNode) {<br />
&nbsp; &nbsp; if (isRootNode(hNode)) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;return m_nRootChildCount;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; else {<br />
&nbsp; &nbsp;&nbsp; &nbsp;return hNode-&gt;cChildren;<br />
&nbsp; &nbsp; }<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;HTREENODE getChildNode(HTREENODE hNode) {<br />
<br />
&nbsp; &nbsp; if (NodeHasChildren(hNode) &gt; 0) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;if (isRootNode(hNode)) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return CONTAINING_RECORD(m_ListHead.Flink, TREENODE, ListEntry);<br />
&nbsp; &nbsp;&nbsp; &nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;else {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return CONTAINING_RECORD(hNode-&gt;ChildListEntry.Flink, TREENODE, ListEntry);<br />
&nbsp; &nbsp;&nbsp; &nbsp;}<br />
<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; else {<br />
&nbsp; &nbsp;&nbsp; &nbsp;return NULL;<br />
&nbsp; &nbsp; }<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;BOOL isRootNode(HTREENODE hNode) {<br />
&nbsp; &nbsp; return TN_ROOT == hNode;<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;HTREENODE getRootNode(){<br />
&nbsp; &nbsp; return TN_ROOT;<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;HTREENODE GetParentNode(HTREENODE hNode) {<br />
&nbsp; &nbsp; return hNode-&gt;pParentNode;<br />
&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;HTREENODE getNextNode( HTREENODE hNode ) {<br />
<br />
&nbsp; &nbsp; PLIST_ENTRY&nbsp;&nbsp;pListHead;<br />
<br />
&nbsp; &nbsp; if (isRootNode(hNode)) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;return NULL;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; if (isRootNode(hNode-&gt;pParentNode)) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;pListHead = &amp;m_ListHead;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; else {<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp;&nbsp; &nbsp;pListHead = &amp;hNode-&gt;pParentNode-&gt;ChildListEntry;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; PLIST_ENTRY&nbsp;&nbsp;pNext = hNode-&gt;ListEntry.Flink;<br />
<br />
&nbsp; &nbsp; if (pListHead == pNext) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;return NULL;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; else {<br />
&nbsp; &nbsp;&nbsp; &nbsp;return CONTAINING_RECORD(pNext, TREENODE, ListEntry);<br />
&nbsp; &nbsp; }<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;BOOL NodeHasChildren( HTREENODE hNode ) {<br />
&nbsp; &nbsp; if (isRootNode(hNode)) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;return m_nRootChildCount &gt; 0;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; else {<br />
&nbsp; &nbsp;&nbsp; &nbsp;return hNode-&gt;cChildren &gt; 0;<br />
&nbsp; &nbsp; }<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;HTREENODE InsertNode(LPARAM lparam, HTREENODE hParent = TN_ROOT, HTREENODE hInsertAfter = TN_LAST ) {<br />
<br />
&nbsp; &nbsp; TREENODE *&nbsp;&nbsp;pTreeNode = new TREENODE;<br />
&nbsp; &nbsp; pTreeNode-&gt;cChildren = 0;<br />
&nbsp; &nbsp; pTreeNode-&gt;lParam = lparam;<br />
&nbsp; &nbsp; pTreeNode-&gt;pParentNode = hParent;<br />
<br />
&nbsp; &nbsp; InitializeListHead(&amp;pTreeNode-&gt;ListEntry);<br />
&nbsp; &nbsp; InitializeListHead(&amp;pTreeNode-&gt;ChildListEntry);<br />
<br />
<br />
&nbsp; &nbsp; PLIST_ENTRY&nbsp;&nbsp;pListEntry = NULL;<br />
<br />
&nbsp; &nbsp; if (TN_ROOT == hParent) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;pListEntry = &amp;m_ListHead;<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;m_nRootChildCount++;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; else {<br />
&nbsp; &nbsp;&nbsp; &nbsp;pListEntry = &amp;hParent-&gt;ChildListEntry;<br />
&nbsp; &nbsp;&nbsp; &nbsp;hParent-&gt;cChildren++;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; if (TN_LAST == hInsertAfter) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;InsertTailList(pListEntry, &amp;pTreeNode-&gt;ListEntry);<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; else if (TN_FIRST == hInsertAfter){<br />
&nbsp; &nbsp;&nbsp; &nbsp;InsertHeadList(pListEntry, &amp;pTreeNode-&gt;ListEntry);<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; else {<br />
&nbsp; &nbsp;&nbsp; &nbsp;InsertHeadList(&amp;hInsertAfter-&gt;ListEntry, &amp;pTreeNode-&gt;ListEntry);<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; m_nCount++;<br />
<br />
&nbsp; &nbsp; return pTreeNode;<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;DWORD GetNodeData( HTREENODE hNode ) {<br />
&nbsp; &nbsp; if (isRootNode(hNode)) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;return -1;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; else {<br />
&nbsp; &nbsp;&nbsp; &nbsp;return hNode-&gt;lParam;<br />
&nbsp; &nbsp; }<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;BOOL SetNodeData( HTREENODE hNode, DWORD dwData ) {<br />
&nbsp; &nbsp; if (isRootNode(hNode)) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;return FALSE;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; else {<br />
&nbsp; &nbsp;&nbsp; &nbsp;hNode-&gt;lParam = dwData;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; return TRUE;<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;BOOL DeleteAllNodes() {<br />
&nbsp; &nbsp; return DeleteNode(TN_ROOT);<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;BOOL DeleteNode(HTREENODE hNode) {<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; HTREENODE hNext = getChildNode(hNode);<br />
<br />
&nbsp; &nbsp; while (hNext) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;HTREENODE hNextNode = getNextNode(hNext);<br />
&nbsp; &nbsp;&nbsp; &nbsp;DeleteNode(hNext);<br />
&nbsp; &nbsp;&nbsp; &nbsp;hNext = hNextNode;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; if (!isRootNode(hNode)) {<br />
&nbsp; &nbsp;&nbsp; &nbsp;if (isRootNode(hNode-&gt;pParentNode))&nbsp;&nbsp;{<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;m_nRootChildCount--;<br />
&nbsp; &nbsp;&nbsp; &nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;else {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;hNode-&gt;pParentNode-&gt;cChildren--;<br />
&nbsp; &nbsp;&nbsp; &nbsp;}<br />
&nbsp; &nbsp;&nbsp; &nbsp;m_nCount--;<br />
<br />
&nbsp; &nbsp;&nbsp; &nbsp;RemoveEntryList(&amp;hNode-&gt;ListEntry);<br />
&nbsp; &nbsp;&nbsp; &nbsp;delete hNode;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; return TRUE;<br />
&nbsp;&nbsp;}<br />
};<br />
<br />
<br />
void PrintNode(CTree * pTree, HTREENODE hNode, BOOL bIsRecursive)<br />
{<br />
&nbsp;&nbsp;HTREENODE hNext = pTree-&gt;getChildNode(hNode);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;while (hNext)<br />
&nbsp;&nbsp;{<br />
&nbsp; &nbsp; printf(&quot;0x%X 0x%X\t%d\n&quot;, hNext, pTree-&gt;GetParentNode(hNext), pTree-&gt;GetNodeData(hNext));<br />
<br />
&nbsp; &nbsp; if (bIsRecursive){<br />
&nbsp; &nbsp;&nbsp; &nbsp;PrintNode(pTree, hNext, bIsRecursive);<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; hNext = pTree-&gt;getNextNode(hNext);<br />
&nbsp;&nbsp;}<br />
}<br />
<br />
int main(int argc, char* argv[])<br />
{<br />
&nbsp;&nbsp;CTree&nbsp;&nbsp;tree;<br />
&nbsp;&nbsp;HTREENODE hTreeNode = tree.InsertNode(1);<br />
&nbsp;&nbsp;tree.InsertNode(2);<br />
&nbsp;&nbsp;tree.InsertNode(3);<br />
<br />
&nbsp;&nbsp;HTREENODE hTreeChild = tree.InsertNode(4);<br />
&nbsp;&nbsp;tree.InsertNode(6, hTreeChild);<br />
&nbsp;&nbsp;tree.InsertNode(5, hTreeChild, TN_FIRST);<br />
&nbsp;&nbsp;HTREENODE hNewChild = tree.InsertNode(7, hTreeChild);<br />
<br />
&nbsp;&nbsp;tree.InsertNode(8, hNewChild);<br />
&nbsp;&nbsp;tree.InsertNode(9, hNewChild);<br />
<br />
&nbsp;&nbsp;PrintNode(&amp;tree, tree.getRootNode(), TRUE);<br />
<br />
<br />
&nbsp;&nbsp;return 0;<br />
}
vfdff(作者)
2011-04-03 20:10
2
bool SearchTreeKey(PTREENODE root, int key, PTREENODE *ppNode)<br />
{<br />
&nbsp; &nbsp; int i;<br />
&nbsp; &nbsp; bool flag = false; // 默认没有匹配上<br />
<br />
&nbsp; &nbsp; if (root == NULL)&nbsp;&nbsp;// 对于空节点,必然不能匹配上<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return false;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; if (root-&gt;data == key)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;(*ppNode) = root; // 指向匹配的节点<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return true;<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; for (i=0;i&lt;root-&gt;cnChild;i++)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;flag = SearchTreeKey((root-&gt;child)<i>, key, ppNode);<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;if (flag == true)&nbsp;&nbsp;// 已经查找匹配上<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;{<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return true;&nbsp; &nbsp;// 不必再对其余子节点进行遍历<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; return false;<br />
}
vfdff(作者)
2011-04-22 00:53
3
二叉树的先序遍历<br />
static void visit(NODE* root)<br />
{<br />
&nbsp; &nbsp; if (NULL != root)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;printf(&quot; %c\n&quot;, root-&gt;chValue);<br />
&nbsp; &nbsp; }<br />
}<br />
<br />
<br />
void BT_PreOrder(NODE* root)<br />
{<br />
&nbsp; &nbsp; if (NULL != root)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;visit(root);<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;BT_PreOrder(root-&gt;pLeft);<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;BT_PreOrder(root-&gt;pRight);<br />
&nbsp; &nbsp; }&nbsp; &nbsp; <br />
}<br />
void PrintTree(NODE* root)//递归格式化先序打印多叉树<br />
{<br />
&nbsp; &nbsp; static int depth = 0;<br />
&nbsp; &nbsp; int i;<br />
&nbsp; &nbsp; if (root == NULL)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;return;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; for (i=0;i&lt;depth;i++)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;printf(&quot; &quot;);<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; printf(&quot;%c\n&quot;,root-&gt;chValue);<br />
<br />
&nbsp; &nbsp; depth++;<br />
&nbsp; &nbsp; PrintTree(root-&gt;pLeft);<br />
&nbsp; &nbsp; PrintTree(root-&gt;pRight);<br />
&nbsp; &nbsp; depth--; <br />
}
游客请输入验证码
浏览1943035次