Beispiel #1
0
        public int PathSum(TreeNode root, int sum)
        {
            var sumCount = 0;

            CalcSum(root, sum, 0, ref sumCount);
            return(sumCount);
        }
Beispiel #2
0
        private TreeNode BuildTree(int?[] input)
        {
            var root = new TreeNode(input[0].Value);

            AddLeaves(root, input, 1, 0);
            return(root);
        }
Beispiel #3
0
        private void AddLeaves(TreeNode current, int?[] input, int level, int num)
        {
            var inputIndex = (int)Math.Pow(2, level) - 1 + num;

            if (input.Length < inputIndex + 1)
            {
                return;
            }

            if (input[inputIndex] != null)
            {
                current.left = new TreeNode(input[inputIndex].Value);
                AddLeaves(current.left, input, level + 1, num);
            }

            if (input[inputIndex + 1] != null)
            {
                current.right = new TreeNode(input[inputIndex + 1].Value);
                AddLeaves(current.right, input, level + 1, num + 2);
            }
        }
Beispiel #4
0
        private void CalcSum(TreeNode current, int targetSum, int currSum, ref int sumCount)
        {
            if (current == null)
            {
                return;
            }

            currSum += current.val;

            if (currSum == targetSum)
            {
                sumCount++;
                return;
            }
            else
            {
                CalcSum(current.left, targetSum, currSum, ref sumCount);
                CalcSum(current.right, targetSum, currSum, ref sumCount);
            }

            CalcSum(current.left, targetSum, 0, ref sumCount);
            CalcSum(current.right, targetSum, 0, ref sumCount);
        }
Beispiel #5
0
 public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null)
 {
     this.val   = val;
     this.left  = left;
     this.right = right;
 }