public List<List<int>> findPath(TreeNode root, int target) { List<List<int>> result = new List<List<int>>(); List<int> temp = new List<int>(); find(result, temp, root, target, 0); return result; }
public static TreeNode generate(String[] arr) { TreeNode root = new TreeNode(); if (arr.Length == 0) return root; root.val = int.Parse(arr[0]); Queue<TreeNode> q = new Queue<TreeNode>(); Queue<TreeNode> newQ = new Queue<TreeNode>(); q.Enqueue(root); int i = 1; while(i<arr.Length){ newQ = new Queue<TreeNode>(); foreach (TreeNode node in q) { TreeNode left = null; if (arr[i] != "#") { left = new TreeNode(int.Parse(arr[i])); } if (node != null) node.left = left; i++; if (i == arr.Length) return root; TreeNode right = null; if (arr[i] != "#") { right = new TreeNode(int.Parse(arr[i])); } if (node != null) node.right = right; i++; if (i == arr.Length) return root; newQ.Enqueue(left); newQ.Enqueue(right); } q = newQ; } return root; }
private void find(List<List<int>> result, List<int> temp, TreeNode node, int target, int cur) { if (node == null) return; if (node.left == null && node.right == null) { if (cur + node.val == target) { temp.Add(node.val); result.Add(temp); } return; } if (node.left != null) { List<int> left_temp = temp.ToList(); left_temp.Add(node.val); find(result, left_temp, node.left, target, cur + node.val); } if (node.right != null) { List<int> right_temp = temp.ToList(); right_temp.Add(node.val); find(result, right_temp, node.right, target, cur + node.val); } }
public static void printTree(TreeNode root) { if (root == null) return; Queue<TreeNode> q = new Queue<TreeNode>(); q.Enqueue(root); bool bElements = true; Queue<TreeNode> newQ = new Queue<TreeNode>(); while (bElements) { bElements = false; newQ = new Queue<TreeNode>(); foreach (TreeNode node in q) { if (node==null) { Console.Write("# "); newQ.Enqueue(null); newQ.Enqueue(null); } else { Console.Write(node.val + " "); newQ.Enqueue(node.left); newQ.Enqueue(node.right); if (node.left != null || node.right != null) bElements = true; } } q = newQ; Console.WriteLine(); } }