给定一个二叉树,返回自下而上的顺序遍历其节点值(即从左到右,从叶到根逐级)。

来源:互联网 发布:淘宝静物摄影 编辑:程序博客网 时间:2024/05/20 10:14

例如:

   3   / \  9  20    /  \   15   7    返回:
[[15,7] [9,20],[3],]
按层遍历

[  [15,7]  [9,20],  [3],]
    vector<vector<int> > levelOrderBottom(TreeNode *root) {        vector<vector<int>> result;       if(root==NULL)           return result;        queue<TreeNode*> que;        int currentCount=1;        int nextCount=0;        que.push(root);        vector<int> path;        while(!que.empty()){            TreeNode* p=que.front();            que.pop();            path.push_back(p->val);            currentCount--;            if(p->left){                que.push(p->left);                nextCount++;            }            if(p->right){                que.push(p->right);                nextCount++;            }            if(currentCount==0){                result.push_back(path);                path.clear();                currentCount=nextCount;                nextCount=0;            }        }        reverse(result.begin(),result.end());        return result;    }

深度DFS

vector<vector<int> > levelOrderBottom(TreeNode *root) {       if(root==NULL)           return vector<vector<int>>();        vector<vector<int>> result(treeDepth(root),vector<int>());        dfs(root,result.size()-1,result);        return result;    }    int treeDepth(TreeNode* root){        if(root==NULL)            return 0;        if(root->left==NULL&&root->right==NULL)            return 1;        return max(treeDepth(root->left),treeDepth(root->right))+1;    }    void dfs(TreeNode* root,int high,vector<vector<int>>& result){        if(root==NULL)            return;                result[high].push_back(root->val);                      dfs(root->left,high-1,result);         //递归左子树        dfs(root->right,high-1,result);       //递归右子树    }


阅读全文
0 0
原创粉丝点击