(算法)N叉树的层序遍历————<队列—深搜>

1. 题⽬链接:429.N叉树的层序遍历

2. 题⽬描述:

3. 解法:

算法思路:

层序遍历即可~仅需多加⼀个变量,⽤来记录每⼀层结点的个数就好了。 

C++算法代码: 

/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution 
{
public:
    vector<vector<int>> levelOrder(Node* root) 
    {
        vector<vector<int>>answer;  //最后返回值
        //判断空树的情况
        if(root==nullptr)
        {
            return answer;
        }
        queue<Node*>temp;   //记录一层中需要被访问的节点
        temp.push(root);
        while(temp.size())
        {
            //记录一层中该访问的元素个数,防止越界访问
            int num=temp.size();
            //访问一层的元素
            vector<int>t;   //记录一层的元素
            for(int i=0;i<num;i++)
            {
                t.push_back(temp.front()->val);
                //将访问元素的孩子节点加入访问队列
                for(Node* child:temp.front()->children)
                {
                    temp.push(child);
                }
                //被访问过的节点退出访问队列
                temp.pop();
            }
            answer.push_back(t);
        }
        return answer;
    }
};

Java算法代码:

/*
// Definition for a Node.
class Node {
 public int val;
 public List<Node> children;
 public Node() {}
 public Node(int _val) {
 val = _val;
 }
 public Node(int _val, List<Node> _children) {
 val = _val;
 children = _children;
 }
};
*/
class Solution
{
	public List<List<Integer>> levelOrder(Node root)
	{
		List<List<Integer>> ret = new ArrayList<>();
		if (root == null) return ret;
		Queue<Node> q = new LinkedList<>();
		q.add(root);
		while (!q.isEmpty())
		{
			int sz = q.size();
			List<Integer> tmp = new ArrayList<>(); // 统计本层的结点信息 
			for (int i = 0; i < sz; i++)
			{
				Node t = q.poll();
				tmp.add(t.val);
				for (Node child : t.children) // 让孩⼦⼊队 
				{
					if (child != null)
						q.add(child);
				}
			}
			ret.add(tmp);
		}
		return ret;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

课堂随笔

感谢支持~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值