using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace BasicOperation.TreeNodeUtils { public class TreeNodeHelper { public static List ToList(TreeNodeCollection nodes) { List list = new List(); foreach (TreeNode node in ToIEnumerable(nodes)) list.Add(node); return list; } public static IEnumerable ToIEnumerable(TreeNodeCollection nodes) { foreach (TreeNode c1 in nodes) { yield return c1; foreach (TreeNode c2 in ToIEnumerable(c1.Nodes)) { yield return c2; } } } /// /// 找到更改的TreeNode 包括增加,删除,修改 /// /// /// /// public static List> FindModify(List originNodes,List currentNodes) { var res = new List>(); return res; } /// /// 层次遍历树节点 /// /// public static void LevelTraversal(TreeNodeCollection nodes) { if (nodes == null) { return; } var queue = new Queue(); foreach (TreeNode node in nodes) { queue.Enqueue(node); } while (queue.Count > 0) { // 出队 var one = queue.Dequeue(); // 访问 Debug.WriteLine(one.Level + " " + one.Text.ToString()); // 子节点入队 foreach (TreeNode subNode in one.Nodes) { queue.Enqueue(subNode); } } } public static void LevelTraversal(TreeNode node) { if (node == null) { return; } var queue = new Queue(); queue.Enqueue(node); while (queue.Count > 0) { // 出队 var one = queue.Dequeue(); // 访问 Debug.WriteLine(one.Level + " " + one.Text.ToString()); // 子节点入队 foreach (TreeNode subNode in one.Nodes) { queue.Enqueue(subNode); } } } public static void LevelTraversalFunc(TreeNode node,Func visitFunc) { if (node == null) { return; } var queue = new Queue(); queue.Enqueue(node); while (queue.Count > 0) { // 出队 var one = queue.Dequeue(); // 访问 //Debug.WriteLine(one.Level + " " + one.Text.ToString()); visitFunc(one); // 子节点入队 foreach (TreeNode subNode in one.Nodes) { queue.Enqueue(subNode); } } } /// /// 深度非递归遍历树节点 /// /// public static List DeepTraversal(TreeNodeCollection nodes) { var res = new List(); if (nodes == null) { return res; } var stack = new Stack(); // 倒序入栈 for (int i = 0; i < nodes.Count; i++) { stack.Push(nodes[nodes.Count - i - 1]); } while (stack.Count > 0) { // 出栈 var oneNode = stack.Pop(); // 访问 //Debug.WriteLine(oneNode.Level + " " + oneNode.Text.ToString()); res.Add(oneNode); // 倒序入栈 for (int j = 0; j < oneNode.Nodes.Count; j++) { stack.Push(oneNode.Nodes[oneNode.Nodes.Count - j - 1]); } } return res; } public static void DeepTraversal(TreeNode node) { if (node == null) { return; } var stack = new Stack(); stack.Push(node); while (stack.Count > 0) { var oneNode = stack.Pop(); Debug.WriteLine(oneNode.Level + " " + oneNode.Text.ToString()); for (int j = 0; j < oneNode.Nodes.Count; j++) { stack.Push(oneNode.Nodes[oneNode.Nodes.Count - j - 1]); } } } } }