コード例 #1
0
 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;
 }
コード例 #2
0
        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;
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
 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();
     }
 }