刷題 - 按之字形打印二叉樹

題目描述:

請實現一個函數按照之字形打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右至左的順序打印,第三行按照從左到右的順序打印,其他行以此類推。

解題思路:

從題目分析可知,題目的意思是:從上到下,單數行從左到右打印,雙數行從右到左打印,這就需要我們在求解過程中要記住當前打印的是單數行還是奇數行。

考慮設置兩個輔助棧空間,分別用於存放單數行的數據和雙數行的數據,根據層序遍歷的思想:遍歷某一行時,可以直接將下一行的內容緩存,由此得到處理流程思路:

                                     

對上面這個二叉樹:

初始化1入單行棧,1出棧時,需要將1按照左節點進棧、右節點進展的順序,將其子節點壓入雙行棧,這樣後續雙行棧出棧時,出棧順序爲從右到左。

雙行棧出棧時,同樣邊出棧,邊將子節點入單行棧,但是入棧順序是:先入右節點,再入左節點,這樣後續單行棧出棧時,出棧順序爲從左到右。

class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        vector<vector<int>> res;
        if(pRoot == NULL)
            return res;
        stack<TreeNode*> s_single;//臨時存放單層的數據
        stack<TreeNode*> s_double;//臨時存放雙層的數據
        //初始爲1層
        int layer = 1; 
        s_single.push(pRoot);
        while(!s_single.empty() || !s_double.empty()){
            //雙層
            if(layer%2 != 0){
                vector<int> v_single;
                while(!s_single.empty()){
                    TreeNode* tmp = s_single.top();
                    v_single.push_back(tmp->val);
                    s_single.pop();
                    if(tmp->left){
                        s_double.push(tmp->left);
                    }
                    if(tmp->right){
                        s_double.push(tmp->right);
                    }
                }
                res.push_back(v_single);
                layer++;
            }
            //單層
            else{
                vector<int> v_double;
                while(!s_double.empty()){
                    TreeNode* tmp = s_double.top();
                    v_double.push_back(tmp->val);
                    s_double.pop();
                    if(tmp->right){
                        s_single.push(tmp->right);
                    }
                    if(tmp->left){
                        s_single.push(tmp->left);
                    }
                }
                res.push_back(v_double);
                layer++;
            }
        }
        return res;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章