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,null,null,15,7]
,
3 / 9 20 / 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
可以立刻想到两种方法,也就是BFS和DFS。
先说BFS,BFS实际上就是一层一层的遍历,开辟两个数组,分别存放当前处理的节点和当前处理节点的孩子节点,也就是下一层的节点,每次处理完一层,将当前和下一轮数组进行交换,注意每一轮处理之前别忘了清空下一轮数组。
DFS我们写一个辅助函数,其中参数h记录当前处理的层数,当层数大于等于我们的结果数组时,就应该新添加一行,用来存储这一层的节点。这道题前序遍历,中序遍历,后续遍历都可以,只要记住先访问左子树后访问右子树就行。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ //BFS class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { if(root == nullptr) return {}; vector<vector<int>> res; vector<TreeNode*> curr, next; curr.push_back(root); while(!curr.empty()){ vector<int> temp; next.clear(); for(auto i:curr){ if(i->left) next.push_back(i->left); if(i->right) next.push_back(i->right); temp.push_back(i->val); } res.push_back(temp); curr.swap(next); } return res; } };
//DFS class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { levelOrder(root,0); return res; } void levelOrder(TreeNode* root, int h) { if(root == nullptr) return; if(res.size() <= h) res.push_back({}); levelOrder(root->left, h+1); res[h].push_back(root->val); levelOrder(root->right, h+1); } private: vector<vector<int>> res; };
LeetCode 102. Binary Tree Level Order Traversal02. 二叉树的层次遍历 (C++)
原文:https://www.cnblogs.com/silentteller/p/10897401.html