铁猛老师书学习笔记
<------------------------------------------------------------------------------------------>
问题1: int[]类型数组求和
问题2: stack的修改-递归-恢复
问题3: 平衡二叉树路径和
int[] SortArr = { 1, 2, 3, 4, 5, 6, 7};
Node Tree = BinaryTree(SortArr, 0, SortArr.Length - 1);
Console.WriteLine("Builde Tree Done!");
Queue<int> Sums = new Queue<int>();
GetPathSums(Tree, 0, Sums);
Console.WriteLine("Calculate Path-Sum Done!");
Console.Write("[");
foreach (var item in Sums.ToArray())
{
Console.Write($"\t{item}");
}
Console.WriteLine("\t]");
List<int> list = CollectSums(Tree);
Console.WriteLine("Collect Path-Sum Done!");
foreach (var item in list)
{
Console.Write($"{item} ");
}
Console.WriteLine();
/*----------------------------------------*/
static List<int> CollectSums(Node node)
{
var sums = new List<int>();
if (node == null)
{
return sums;
}
else
{
foreach (var item in CollectSums(node.Left))
{
sums.Add(item + (int)node.val);
}
foreach (var item in CollectSums(node.Right))
{
sums.Add(item + (int)node.val);
}
if (sums.Count == 0)
{
sums.Add((int)node.val);
}
return sums;
}
}
static void GetPathSums(Node node, int ParentSum, Queue<int> sums)
{
if (node == null)
{
return;
}
else
{
var CurSum = (int)node.val + ParentSum;
if (node.Left == null && node.Right == null)
{
sums.Enqueue(CurSum);
}
GetPathSums(node.Left, CurSum, sums);
GetPathSums(node.Right, CurSum, sums);
}
}
static Node BinaryTree(int[] arr, int low, int max)
{
if (low > max)
{
return null;
}
var mid = low + (max - low) / 2;
var root = new Node(arr[mid]);
root.Left = BinaryTree(arr, low, mid - 1);
root.Right = BinaryTree(arr, mid + 1, max);
return root;
}
public class Node
{
public object val { get; set; }
public Node Left { get; set; }
public Node Right { get; set; }
public Node(int val)
{
this.val = val;
Left = null;
Right = null;
}
}
运行结果:
问题4: XXXXXXXXX