二叉樹層序遍歷,按層存儲

二叉樹層序遍歷,按層存儲

給定二叉樹的根結點root,請返回打印結果,結果按照每一層一個數組進行儲存,所有數組的順序按照層數從上往下,且每一層的數組內元素按照從左往右排列。保證結點數小於等於500。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/

class TreePrinter {
public:
    vector<vector<int> > printTree(TreeNode* root) {
        int head=-1,tail=-1;	//隊頭隊尾
        TreeNode *q[505],*now;
        map<int,int> dep;		//存儲每個結點的高度
        
        if(root==NULL)
            return ans;
        q[++tail]=root;
        dep[root->val]=0;
        while(head!=tail){
            now=q[++head];
            if(now->left){
                q[++tail]=now->left;
                dep[now->left->val]=dep[now->val]+1;		//左孩子的高度爲父節點加1
            }
            if(now->right){
                q[++tail]=now->right;
                dep[now->right->val]=dep[now->val]+1;		//右孩子的高度爲父節點加1
            }
        }
        vector<vector<int> > ans;
        for(int j,i=0;i<=tail;i=j){
            j=i;
            vector<int> temp;
            while(j<=tail&&dep[q[j]->val]==dep[q[i]->val]){		//如果q[j]和q[i]在同一層,遍歷完在同一層的結點
                temp.push_back(q[j]->val);
                ++j;           
            }
            ans.push_back(temp);
        }
        return ans;
    }
};

//牛客網測試通過
//本文章爲作者原創,記錄和分享自己的學習歷程,轉載請註明出處

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