二叉树层序遍历,按层存储

二叉树层序遍历,按层存储

给定二叉树的根结点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 > printTree(TreeNode* root) {
        int head=-1,tail=-1;	//队头队尾
        TreeNode *q[505],*now;
        map 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 > ans;
        for(int j,i=0;i<=tail;i=j){
            j=i;
            vector 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;
    }
};

//牛客网测试通过
//本文章为作者原创,记录和分享自己的学习历程,转载请注明出处

你可能感兴趣的:(C/C++)