php遞迴問題

來源:互聯網
上載者:User
本帖最後由 qq43599939 於 2013-08-28 12:42:25 編輯

array('id'=>1,'name'=>'中國','pid'=>0),          1=>array('id'=>2,'name'=>'北京','pid'=>1),      );      print_r(catsort($area));     function catsort($cate, $pid = 0){        $arr = array();        foreach($cate as $v){            if ($v['pid'] == $pid){                $arr[] = $v;                $arr = array_merge($arr, catsort($cate ,$v['id']));                //$arr[] = $v;            }        }        return $arr;        }    ?>

這個問題讓我很困惑,為什麼 $arr[] = $v放在$arr = array_merge($arr, catsort($cate ,$v['id']))前面返回的先是中國,然後才是北京。而放到$arr = array_merge($arr, catsort($cate ,$v['id']))後面的時候卻是北京先,後中國呢?請幫忙詳細解釋下,謝謝


回複討論(解決方案)

你至少應該閱讀過關於書的遍曆吧?
遞迴就是遍曆一顆樹

根據訪問結點操作發生位置命名:
① NLR:前序走訪(PreorderTraversal亦稱(先序遍曆))
??訪問根結點的操作發生在遍曆其左右子樹之前。
② LNR:中序遍曆(InorderTraversal)
??訪問根結點的操作發生在遍曆其左右子樹之中(間)。
③ LRN:後序遍曆(PostorderTraversal)
??訪問根結點的操作發生在遍曆其左右子樹之後。

$arr[] = $v放在$arr = array_merge($arr, catsort($cate ,$v['id']))前面
是前序走訪
放到$arr = array_merge($arr, catsort($cate ,$v['id']))後面
是後序遍曆

那為什麼放在前面就是前序,後面就是後序,不是很理解,能在說清楚點嗎

        foreach($cate as $v){            if ($v['pid'] == $pid){                $arr[] = $v;                $arr = array_merge($arr, catsort($cate ,$v['id']));                //$arr[] = $v;            }        }


放前面的時候,中國先加到$arr中的沒什麼好說的。

        foreach($cate as $v){            if ($v['pid'] == $pid){                //$arr[] = $v;                $arr = array_merge($arr, catsort($cate ,$v['id'])); //這裡catsort進入遞迴                $arr[] = $v;            }        }


放後面的時候,外層的array_merge函數處理第二個參數"catsort($cate,$v['id'])"時,遞迴進入裡層,在裡層執行了"$arr[]=$v",把北京先加入到了數組中,然後才返回外層,執行外層的"$arr[]=$v".

搞懂了,thank you

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.