C# N叉数的遍历
结点:
// Definition for a Node.
public class Node {
public int val;
public IList<Node> children;
public Node(){}
public Node(int _val,IList<Node> _children) {
val = _val;
children = _children;
}
前序遍历:
public class Solution {
public IList<int> Preorder(Node root) {
IList<int> res = new List<int>();
if(root == null) return res;
res.Add(root.val);
for(int i = 0; i < root.children.Count; i++){
IList<int> temp = Preorder(root.children[i]);
if(temp != null){
foreach(var item in temp){
res.Add(item);
}
}
}
return res;
}
}
后序遍历
public class Solution {
public IList<int> Preorder(Node root) {
IList<int> res = new List<int>();
if(root == null) return res;
for(int i = 0; i < root.children.Count; i++){
IList<int> temp = Preorder(root.children[i]);
if(temp != null){
foreach(var item in temp){
res.Add(item);
}
}
}
res.Add(root.val);
return res;
}
}
最大深度
public class Solution {
public int MaxDepth(Node root) {
int res = 0;
if(root == null)
return 0;
for(int i = 0; i < root.children.Count; i++){
int temp = MaxDepth(root.children[i]);
if(temp > res)
res = temp;
}
return res++;
}
}
—2018/10/03—
层次遍历
public class Solution {
public IList<IList<int>> LevelOrder(Node root) {
IList<IList<int>> list = new List<IList<int>>();
if(root == null ) return list;
Queue<Node> queue = new Queue<Node>();
queue.Enqueue(root);
while(queue.Count != 0){
IList<int> temp = new List<int>();
int n = queue.Count;
for(int i = 0; i < n; i++){
Node node = queue.Dequeue();
temp.Add(node.val);
if(node.children != null){
for(int j = 0; j < node.children.Count; j++){
queue.Enqueue(node.children[j]);
}
}
}
list.Add(temp);
}
return list;
}
}