1 public class Solution 2 { 3 Stack<int> S = new Stack<int>(); 4 int maxValue = 0; 5 public void Trace(TreeNode root) 6 { 7 if (root != null) 8 { 9 S.Push(root.val); 10 if (root.left != null) 11 { 12 Trace(root.left); 13 } 14 if (root.right != null) 15 { 16 Trace(root.right); 17 } 18 if (root.left == null && root.right == null) 19 { 20 21 var ary = S.ToArray().Reverse().ToList(); 22 var len = ary.Count(); 23 for (var i = 0; i < len; i++) 24 { 25 for (int j = i + 1; j < len; j++) 26 { 27 maxValue = Math.Max(maxValue, Math.Abs(ary[i] - ary[j])); 28 } 29 //Console.WriteLine(a); 30 } 31 //Console.WriteLine(maxValue); 32 } 33 S.Pop(); 34 } 35 } 36 public int MaxAncestorDiff(TreeNode root) 37 { 38 Trace(root); 39 return maxValue; 40 } 41 }