public TreeNode ReverseTree(TreeNode root) { if (root == null) return null; Stack<TreeNode> treeStack = new Stack<TreeNode> (); TreeNode newRoot = null; while (root != null) { treeStack.Push (root); newRoot = root; root = root.Left; } TreeNode deepLeft = newRoot; TreeNode temp, right; treeStack.Pop (); while (treeStack.Count != 0) { temp = treeStack.Pop (); right = temp.Right; deepLeft.Right = temp; deepLeft.Left = right; deepLeft = temp; } return newRoot; }
public static void Main (string[] args) { TreeNode root = new TreeNode (1); TreeNode nodeA = new TreeNode(2); TreeNode nodeB = new TreeNode (3); TreeNode nodeC = new TreeNode(4); TreeNode nodeD = new TreeNode (5); TreeNode nodeE = new TreeNode(6); root.Left = nodeA; root.Right = nodeB; nodeA.Left = nodeC; nodeC.Left = nodeD; nodeC.Right = nodeE; Reverser reverser = new Reverser (); TreeNode newRoot = reverser.ReverseTree (root); Console.WriteLine (newRoot.Value + " " + newRoot.Left.Value + " " + newRoot.Right.Value); Console.WriteLine (newRoot.Right.Right.Value + " " + newRoot.Right.Right.Left.Value + " " + newRoot.Right.Right.Right.Value); }