二叉樹的遍歷演算法【和森林的遍歷】【PHP 原始碼測試】

勺顛顛發表於2019-07-04

樹的概念:
樹是一種非線性的資料結構,一般由根結點【樹根】和N棵子樹構成,同時M棵子樹構成的稱為森林。
下面給個圖

二叉樹的遍歷【和森林的遍歷】
其中A第一層,B,C第二層,DEFG第三層,H第四層
二叉樹的概念:
都是樹,只不過呢每個結點子樹最多為2棵子樹,左子樹和右子樹是有順序的,二叉樹分類有左斜樹,右斜樹,滿二叉樹,完全二叉樹等
斜樹
二叉樹的遍歷演算法【和森林的遍歷】

滿二叉樹
二叉樹的遍歷演算法【和森林的遍歷】
完全二叉樹
二叉樹的遍歷演算法【和森林的遍歷】

遍歷演算法:
前序【有的叫先序?】,中序,後序,層序遍歷
遍歷演算法的目的:只是把非線性結點的二叉樹折騰成線性結構好迴圈,就這樣,不要覺得很歷害!^_^
線性結構是啥,可以看本人前面寫過的棧,佇列這些玩意哦

下面給個小例子吧

$bitree = [
    'a'=>[
        'b'=>[
            'd',
            'e'
        ],
        'c'=>[
            'f',
            'g'
        ]
    ]
];

就是長這樣的二叉樹

二叉樹的遍歷演算法【和森林的遍歷】【php原始碼測試】
當然了,要是人家寫的二叉樹資料結構一般都是這樣的

typedef struct tree{
    int data;
    struct tree *ltree;
    struct tree *rtree;
}tree,*Bitree;

這是c的二叉鏈資料結構,有左,右之分,我懶的搞了,用個陣列代替一下嘍,
下面我們寫個後序遍歷演算法【其實很簡單^_^】
後序遍歷的話就是輸出:DEBFGCA

function preTraverse($a)
{
    foreach ($a as $k=>$item){
            if (is_array($item)){
                preTraverse($item);
                echo $k.PHP_EOL;
            }else{
                echo $item.PHP_EOL;
            }
    }
}

輸出結點圖:

二叉樹的遍歷演算法【和森林的遍歷】【PHP 原始碼測試】
吶,簡單吧,就一個遞迴就實現了,下面我們弄個大森林【也是樹】

$a = [
    'a'=>[
        '1'=>[
            '4'=>[
                '13'=>[
                    '40'=>[
                        '121'=>[
                            '124'=>[
                                '127'=>[
                                    '130'=>[
                                        '133'=>[
                                            '136'=>[
                                                '139'=>[
                                                    '142'=>[
                                                        '145'=>[
                                                            '148'=>[
                                                                '151'=>[
                                                                    '154'=>[
                                                                        '157'=>[
                                                                            '160'=>[
                                                                                '163'=>[
                                                                                    '166'=>[
                                                                                        '169'=>[
                                                                                            '172'=>[
                                                                                                '175'=>[
                                                                                                    '178'=>[
                                                                                                        '181'=>[
                                                                                                            '184'=>[
                                                                                                                '187'=>[
                                                                                                                    '190'=>[
                                                                                                                        '193'=>[
                                                                                                                            '196'=>[
                                                                                                                                '199',
                                                                                                                                '200'
                                                                                                                            ],
                                                                                                                            '197',
                                                                                                                            '198'
                                                                                                                        ],
                                                                                                                        '194',
                                                                                                                        '195'
                                                                                                                    ],
                                                                                                                    '191',
                                                                                                                    '192'
                                                                                                                ],
                                                                                                                '188',
                                                                                                                '189'
                                                                                                            ],
                                                                                                            '185',
                                                                                                            '186'
                                                                                                        ],
                                                                                                        '182',
                                                                                                        '183'
                                                                                                    ],
                                                                                                    '179',
                                                                                                    '180'
                                                                                                ],
                                                                                                '176',
                                                                                                '177'
                                                                                            ],
                                                                                            '173',
                                                                                            '174',
                                                                                        ],
                                                                                        '170',
                                                                                        '171'
                                                                                    ],
                                                                                    '167',
                                                                                    '168'
                                                                                ],
                                                                                '164',
                                                                                '165'
                                                                            ],
                                                                            '161',
                                                                            '162'
                                                                        ],
                                                                        '158',
                                                                        '159'
                                                                    ],
                                                                    '155',
                                                                    '156'
                                                                ],
                                                                '152',
                                                                '153'
                                                            ],
                                                            '149',
                                                            '150'
                                                        ],
                                                        '146',
                                                        '147'
                                                    ],
                                                    '143',
                                                    '144'
                                                ],
                                                '140',
                                                '141'
                                            ],
                                            '137',
                                            '138'
                                        ],
                                        '134',
                                        '135'
                                    ],
                                    '131',
                                    '132'
                                ],
                                '128',
                                '129'
                            ],
                            '125',
                            '126'
                        ],
                        '122',
                        '123'
                    ],
                    '41',
                    '42'
                ],
                '14'=>[
                    '43',
                    '44',
                    '45'
                ],
                '15'=>[
                    '46',
                    '47',
                    '48'
                ]
            ],
            '5'=>[
                '16'=>[
                    '49',
                    '50',
                    '51'
                ],
                '17'=>[
                    '52',
                    '53',
                    '54'
                ],
                '18'=>[
                    '55',
                    '56',
                    '57'
                ]
            ],
            '6'=>[
                '19'=>[
                    '58',
                    '59',
                    '60'
                ],
                '20'=>[
                    '61',
                    '62',
                    '63'
                ],
                '21'=>[
                    '64',
                    '65',
                    '66'
                ]
            ]
        ],
        '2'=>[
            '7'=>[
                '22'=>[
                    '67',
                    '68',
                    '69'
                ],
                '23'=>[
                    '70',
                    '71',
                    '72'
                ],
                '24'=>[
                    '73',
                    '74',
                    '75'
                ]
            ],
            '8'=>[
                '25'=>[
                    '76',
                    '77',
                    '78'
                ],
                '26'=>[
                    '79',
                    '80',
                    '81'
                ],
                '27'=>[
                    '82',
                    '83',
                    '84'
                ]
            ],
            '9'=>[
                '28'=>[
                    '85',
                    '86',
                    '87',
                ],
                '29'=>[
                    '88',
                    '89',
                    '90'
                ],
                '30'=>[
                    '91',
                    '92',
                    '93'
                ]
            ]
        ],
        '3'=>[
            '10'=>[
                '31'=>[
                    '94',
                    '95',
                    '96'
                ],
                '32'=>[
                    '97',
                    '98',
                    '99'
                ],
                '33'=>[
                    '100',
                    '101',
                    '102'
                ]
            ],
            '11'=>[
                '34'=>[
                    '103',
                    '104',
                    '105'
                ],
                '35'=>[
                    '106',
                    '107',
                    '108'
                ],
                '36'=>[
                    '109',
                    '110',
                    '111'
                ]
            ],
            '12'=>[
                '37'=>[
                    '112',
                    '113',
                    '114'
                ],
                '38'=>[
                    '115',
                    '116',
                    '117',
                ],
                '39'=>[
                    '118',
                    '119',
                    '120'
                ]
            ]
        ],
        'test'=>[
            'a',
            'b',
            'c',
            'd',
            'e'=>[
                'f'=>'g',
                'h'=>[
                    'i'=>[
                        'j'=>[
                            'k'=>[
                                'l'=>[
                                    'm'=>[
                                        'n'=>[
                                            'o'=>[
                                                'p'=>[
                                                    'q'=>[
                                                        'r'=>[
                                                            's'=>[
                                                                't'=>[
                                                                    'u'=>[
                                                                        'v'=>[
                                                                            'w'=>[
                                                                                'x'=>[
                                                                                    'y'=>[
                                                                                        'z'=>[
                                                                                            'aa'=>[
                                                                                                'bb'=>[
                                                                                                    'cc'=>[
                                                                                                        'dd'=>[
                                                                                                            'ee'=>[
                                                                                                                'ff'=>[
                                                                                                                    'gg'=>[
                                                                                                                        'hh'=>[
                                                                                                                            'ii'=>[
                                                                                                                                'jj'=>[
                                                                                                                                    'kk'=>[
                                                                                                                                        'll'=>[
                                                                                                                                            'mm'=>[
                                                                                                                                                'nn'=>[
                                                                                                                                                    'oo'=>[
                                                                                                                                                        'pp'=>[
                                                                                                                                                            'qq'=>[
                                                                                                                                                                'rr'=>[
                                                                                                                                                                    'ss'=>[
                                                                                                                                                                        'tt'=>[
                                                                                                                                                                            'uu'=>[
                                                                                                                                                                                'vv'=>[
                                                                                                                                                                                    'ww'=>[
                                                                                                                                                                                        'xx'=>[
                                                                                                                                                                                            'yy'=>[
                                                                                                                                                                                                'zz'
                                                                                                                                                                                            ]
                                                                                                                                                                                        ]
                                                                                                                                                                                    ]
                                                                                                                                                                                ]
                                                                                                                                                                            ]
                                                                                                                                                                        ]
                                                                                                                                                                    ]
                                                                                                                                                                ]
                                                                                                                                                            ]
                                                                                                                                                        ]
                                                                                                                                                    ]
                                                                                                                                                ]
                                                                                                                                            ]
                                                                                                                                        ]
                                                                                                                                    ]
                                                                                                                                ]
                                                                                                                            ]
                                                                                                                        ]
                                                                                                                    ]
                                                                                                                ]
                                                                                                            ]
                                                                                                        ]
                                                                                                    ]
                                                                                                ]
                                                                                            ]
                                                                                        ]
                                                                                    ]
                                                                                ]
                                                                            ]
                                                                        ]
                                                                    ]
                                                                ]
                                                            ]
                                                        ]
                                                    ]
                                                ]
                                            ]
                                        ]
                                    ]
                                ]
                            ]
                        ]
                    ]
                ]
            ]
        ],
        'haha'=>[
            'h'
        ]
    ],

];

數字從1到200,字母從a到z再從aa-zz,演算法都一樣
輸出結果我就不截圖了,自己執行一下就知道了。
一般二叉樹我們會用到,比如家譜圖的生成。

相關文章