private static TreeNode GetTree(int val, TreeNode temp1, TreeNode temp2) { TreeNode root = new LeetCode.TreeNode(val); root.left = temp1; root.right = temp2; return(root); }
public TreeProblems() { LeetCode.TreeNode node = root; node.left = new LeetCode.TreeNode(2); node.right = new LeetCode.TreeNode(2); node = root.right; node.left = new LeetCode.TreeNode(4); node.right = new LeetCode.TreeNode(3); node = root.left; node.left = new LeetCode.TreeNode(4); node.right = new LeetCode.TreeNode(3); node = root.left.right; node.left = new LeetCode.TreeNode(8); node.right = new LeetCode.TreeNode(9); node = root.right.right; node.left = new LeetCode.TreeNode(8); node.right = new LeetCode.TreeNode(9); }
/// <summary> /// 给定一棵树,原地展开它,使用右子树作为链表;先序遍历展开 /// </summary> /// <param name="root"></param> public void Flatten(TreeNode root) { while (root != null) { if (root.left != null) { TreeNode leftTmp = root.left; TreeNode leftRight = leftTmp; while (leftRight.right != null) { leftRight = leftRight.right; } root.left = null; leftRight.right = root.right; root.right = leftTmp; } root = root.right; } }
private TreeNode ConstructMaximumBinaryTree(int[] nums, int lo, int hi) { if (lo > hi) { return(null); } int maxIndex = lo; for (int i = lo + 1; i <= hi; i++) { if (nums[i] > nums[maxIndex]) { maxIndex = i; } } TreeNode root = new LeetCode.TreeNode(nums[maxIndex]); root.left = ConstructMaximumBinaryTree(nums, lo, maxIndex - 1); root.right = ConstructMaximumBinaryTree(nums, maxIndex + 1, hi); return(root); }