题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0

我的思路主要分为三个部分

1、先求出需要遍历的树的最大高度

    int Deep(TreeNode* pRoot){
        if(pRoot==nullptr) return 0;
        else return max(Deep(pRoot->left),Deep(pRoot->right))+1;
    }

已知最大高度,先把二维vector给开好

 Maxdeep=Deep(pRoot);
 for(int i=0;i<Maxdeep;i++){
 	vector<int> tmp;
 	answer.push_back(tmp);
}

2、再用前序遍历将对应层的节点加入对应层的vector之中

 void Preorder(vector<vector<int> > &answer,TreeNode* pRoot,int level){
        if(pRoot==nullptr) return;
        answer[level].push_back(pRoot->val);
        Preorder(answer,pRoot->left,level+1);
        Preorder(answer,pRoot->right,level+1);
    }

3、最后打印把偶数行翻转一下

 for(int i=0;i<answer.size();i++){
 	if(i%2==1) reverse(answer[i].begin(),answer[i].end());
 }

4、全部代码

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    vector<vector<int> > answer;
    int Maxdeep;
     
    int Deep(TreeNode* pRoot){
        if(pRoot==nullptr) return 0;
        else return max(Deep(pRoot->left),Deep(pRoot->right))+1;
    }
     
    void Preorder(vector<vector<int> > &answer,TreeNode* pRoot,int level){
        if(pRoot==nullptr) return;
        answer[level].push_back(pRoot->val);
        Preorder(answer,pRoot->left,level+1);
        Preorder(answer,pRoot->right,level+1);
    }
     
    vector<vector<int> > Print(TreeNode* pRoot) {
        Maxdeep=Deep(pRoot);
        for(int i=0;i<Maxdeep;i++){
            vector<int> tmp;
            answer.push_back(tmp);
        }
        Preorder(answer,pRoot,0);
        for(int i=0;i<answer.size();i++){
            if(i%2==1) reverse(answer[i].begin(),answer[i].end());
        }
        return answer;
    }
     
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务