zoukankan      html  css  js  c++  java
  • Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

    For example:
    Given binary tree {3,9,20,#,#,15,7},

        3
       / 
      9  20
        /  
       15   7
    

    return its level order traversal as:

    [
      [3],
      [9,20],
      [15,7]
    ]

    解题思路:能够用DFS和BFS思想来解这题.DFS仅仅须要递归遍历深度,将相应深度的值按顺序输出.在用BFS分层遍历时候。一開始内存超了。后来增加深度信息AC了

    #include<iostream>
    #include<vector>
    #include<queue>
    #include<map>
    #include<algorithm>
    using namespace std;
    
    struct TreeNode {
    	int val;
    	TreeNode *left;
    	TreeNode *right;
    	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };
    //内存过大了
    vector<vector<int> > levelOrder(TreeNode *root) {
    	queue<TreeNode*>  BFS_Queue;
    	vector<int> LevelVal;
    	vector<TreeNode*> LevelNode;
    	vector<vector<int> > Result;
    
    	if (root == NULL)
    		return Result;
    	BFS_Queue.push(root);
    	
    	while (!BFS_Queue.empty())
    	{
    		while (!BFS_Queue.empty())
    		{
    			TreeNode* Curnode = BFS_Queue.front();
    			LevelVal.push_back(Curnode->val);
    			BFS_Queue.pop();
    			if (Curnode->left)
    				LevelNode.push_back(Curnode->left);
    			if (Curnode->right)
    				LevelNode.push_back(Curnode->right);
    		}
    		Result.push_back(LevelVal);
    		for_each(LevelNode.begin(), LevelNode.end(), [&BFS_Queue](TreeNode* a){BFS_Queue.push(a); });
    		LevelVal.clear();
    	}
    	return Result;
    	
    }
    //引入深度信息:AC
    vector<vector<int> > levelOrder(TreeNode *root) {
    	queue<pair<TreeNode*,int> >  BFS_Queue;
    	vector<int> LevelVal;
    	vector<vector<int> > Result;
    
    	if (root == NULL)
    		return Result;
    	BFS_Queue.push(make_pair(root,0));
    	int Curlevel = 0;
    	while (!BFS_Queue.empty())
    	{
    		TreeNode* Curnode = BFS_Queue.front().first;
    		if (BFS_Queue.front().second != Curlevel)
    		{
    			Result.push_back(LevelVal);
    			LevelVal.clear();
    			Curlevel = BFS_Queue.front().second;
    		}
    		LevelVal.push_back(Curnode->val);
    		BFS_Queue.pop();
    		if (Curnode->left)
    			BFS_Queue.push(make_pair(Curnode->left, Curlevel + 1));
    		if (Curnode->right)
    			BFS_Queue.push(make_pair(Curnode->right, Curlevel + 1));
    	}
    	Result.push_back(LevelVal);
    	return Result;
    }


     

  • 相关阅读:
    1+X云计算(中级) 单节点部署应用商城系统(gpmall)
    1+X云计算 应用商城系统(gpmall)-遇到的问题以及解决办法
    1+X云计算平台运维与开发(中级)eNSP A~E卷 试题+答案
    vi&vim 基本使用方法
    yum针对软件包操作的常用命令
    本地yum源配置
    SpringCloud微服务初体验
    SpringBoot自定义注解拦截器,实现登录token验证
    MySQL建立SSL连接问题,设置useSSL=false显式禁用SSL,或者设置useSSL=true
    TPL事务
  • 原文地址:https://www.cnblogs.com/llguanli/p/7048374.html
Copyright © 2011-2022 走看看