• 107. Binary Tree Level Order Traversal II


    欢迎fork and star:Nowcoder-Repository-github

    107. Binary Tree Level Order Traversal II

    题目

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
    
    For example:
    Given binary tree [3,9,20,null,null,15,7],
    
        3
       / 
      9  20
        /  
       15   7
    
    return its bottom-up level order traversal as:
    
    [
      [15,7],
      [9,20],
      [3]
    ]
    
    
    

    解析

    • 题目虽然思路很清晰,但是查看了方法2,3感觉也吸收了很多思路!
    // Binary Tree Level Order Traversal II
    class Solution_107 {
    public:
    	//bfs
    	vector<vector<int>> levelOrderBottom(TreeNode* root) {
    		
    		vector<vector<int> > vecs;
    		stack<vector<int>> sta;
    		if (!root)
    		{
    			return vecs;
    		}
    
    		queue<TreeNode*> que;
    		que.push(root);
    
    		while (!que.empty())
    		{
    			int size = que.size();
    			vector<int> vec;
    			TreeNode* temp;
    			for (int i = 0; i < size;i++)
    			{
    				temp = que.front();
    				que.pop();
    
    				vec.push_back(temp->val);
    
    				if (temp->left)
    				{
    					que.push(temp->left);
    				}
    				if (temp->right)
    				{
    					que.push(temp->right);
    				}
    			}
    			sta.push(vec);
    		}
    
    		// reverse(res.begin(),res.end());
    		while (!sta.empty())
    		{
    			vector<int> vec = sta.top();
    			sta.pop();
    			vecs.push_back(vec);
    		}
    
    		return vecs;
    	}
    
        // 记录每层的个数;curCount当前层个数,nextCount下一层个节点个数
    	vector<vector<int>> levelOrderBottom1(TreeNode* root) {
    		int curCount = 0, nextCount = 0, level = 0;
    		vector<vector<int>> ret;
    		if (!root) return ret;
    
    		curCount = 1;
    		queue<TreeNode*> q;
    		q.push(root);
    		ret.push_back(vector<int>(0, curCount));
    
    		while (!q.empty()) {
    			if (curCount == 0) {
    				curCount = nextCount;
    				nextCount = 0;
    				level++;
    				ret.push_back(vector<int>(0, curCount)); //初始化下一层vector的大小
    			}
    
    			TreeNode *node = q.front();
    			q.pop();
    			curCount--;
    			ret[level].push_back(node->val); //在同一层的节点加入
    
    			if (node->left) {
    				nextCount++;
    				q.push(node->left);
    			}
    			if (node->right) {
    				nextCount++;
    				q.push(node->right);
    			}
    		}
    		reverse(ret.begin(), ret.end());
    		return ret;
    	}
    
    
    	//dfs
    	int getHeight(TreeNode *root)
    	{
    		if (!root) 
    			return 0;
    		return max(getHeight(root->left), getHeight(root->right)) + 1;
    	}
    	vector<vector<int> > levelOrderBottom2(TreeNode *root)
    	{
    		if (!root) 
    			return vector<vector<int>>();
    
    		vector<vector<int>> res(getHeight(root), vector<int>());
    
    		dfs(root, res.size() - 1, res);
    		return res;
    	}
    	void dfs(TreeNode *root, int height, vector<vector<int>> &res)
    	{
    		if (!root)
    			return;
    		res[height].push_back(root->val);
    
    		dfs(root->left, height - 1, res);
    		dfs(root->right, height - 1, res);
    	}
    };
    
    
    

    题目来源

  • 相关阅读:
    SAP资产变动明细
    SAP资产明细报表
    SAP连接HANA数据库
    工程变更记录报表
    SELECTION-SCREEN 文本丢失
    FG函数模块
    DOI EXCEL显示报表
    OLE填充EXCEL
    下载模板,上传EXCEL
    SELECTION-SCREEN 加按钮
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8253217.html
Copyright © 2020-2023  润新知