簡體   English   中英

以深度優先順序遞歸遍歷一般樹

[英]Traversing a general tree recursively in depth-first order

我被要求實現一個遞歸函數,以深度優先的順序遍歷一棵普通樹(第一個孩子,下一個同級符號)和一個二叉樹。

該函數應在最后一次訪問節點時將其打印出來。 例如,對於下面的樹,應按以下順序打印節點。 我想我已經完成了二叉樹的功能,但是我做不到一般的功能:

這是我的二叉樹代碼:

void PostOrder(node* root) {
    if (root == NULL)
        return;
    else { 
          PostOrder(root->left); 
          PostOrder(root->right);
          printf(‘%c’, root->key); 
    } 
}

有人可以幫忙嗎?

聽起來這是一個典型的“用二叉樹表示的一般樹”,它有兩個指針:第一個孩子和下一個兄弟。 我們可以將樹繪制為標准的二叉樹,每個子樹都有一個向下的箭頭和一個向右的箭頭。

我認為您評論中描述的樹如下所示:

a
|
V
b ------------> c
|               |
V               V
d --> e --> f   g
                |
                V
                h --> i

您想要在樹的每個節點上:

  1. 通過處理第一個孩子,首先打印所有后代(按照向下箭頭)。
  2. 然后打印節點的值
  3. 然后處理兄弟姐妹(按照右箭頭)。

將其應用於上面的樹,我們得到:

GeneralTreePostOrder(a) ->
    GeneralTreePostOrder(b) ->   # Follow child pointer
        GeneralTreePostOrder(d) ->   # Follow child pointer
            # No children
            print d
            GeneralTreePostOrder(e) ->   # Follow sibling pointer
                 # No children
                 print e
                 GeneralTreePostOrder(f) ->   # Follow sibling pointer
                     # No children
                     print f
                     # No more siblings
        print b
        GeneralTreePostOrder(c) ->   # Follow sibling pointer

等等,它打印defhigca

為常規樹編寫一個新函數(NB printf應該使用雙引號格式的字符串):

void GeneralTreePostOrder (node* root) {
    if (root == NULL)
        return;
    else {
         GeneralTreePostOrder (root->left); // Process children
         printf ("%c", root->key); 
         GeneralTreePostOrder (root->right); // Process siblings
    } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM