4.填充每个节点的下一个右侧节点指针( 三 )

> result;if(root==nullptr){return result;}queue que;que.push(root);TreeNode* end=root;vectorvv;int level=1;while(!que.empty()){TreeNode* tmp=que.front();que.pop();vv.push_back(tmp->val);if(tmp==end){if(level%2==0){reverse(vv.begin(),vv.end());}result.push_back(vv);vv.clear();++level;}if(tmp->left!=nullptr){que.push(tmp->left);}if(tmp->right!=nullptr){que.push(tmp->right);}if(tmp==end){end=que.back();}}return result;}
7.N 叉树的层序遍历
给定一个 N 叉树,返回其节点值的层序遍历 。(即从左到右,逐层遍历) 。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例) 。
示例 1:
输入:root = [1,null,3,2,4,null,5,6]
输出:[[1],[3,2,4],[5,6]]
// Definition for a Node.class Node {public:int val;vector children;Node() {}Node(int _val) {val = _val;}Node(int _val, vector _children) {val = _val;children = _children;}};
思路:
N叉树的层数遍历和二叉树的层序遍历主要思想其实是一致的;遍历二叉树的时候,我们需要遍历他们左右孩子;遍历N叉树的时候,其实遍历孩子就相当于访问数组
vector> levelOrder(Node* root) {vector> result;if(root==nullptr){return result;}queue que;que.push(root);Node* end=root;vector arr;while(!que.empty()){Node* tmp=que.front();que.pop();arr.push_back(tmp->val);for(int i=0;ichildren.size();++i){if(tmp->children[i]!=nullptr)que.push(tmp->children[i]);}if(tmp==end){end=que.back();result.push_back(arr);arr.clear();}}return result;}
注:如果本篇博客有任何错误和建议,欢迎伙伴们留言,你快说句话啊!