题解 | #重建二叉树#
重建二叉树
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
using System; using System.Collections.Generic; using System.Linq; /* public class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode (int x) { val = x; } } */ class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pre int整型一维数组 * @param tin int整型一维数组 * @return TreeNode类 */ public TreeNode reConstructBinaryTree (List<int> pre, List<int> vin) { // write code here if(pre.Count == 0) return null; //找到根节点 int root = pre.First(); int index = vin.IndexOf(root); TreeNode tree = new TreeNode(root); //递归左子树 tree.left = reConstructBinaryTree(pre.Skip(1).Take(index).ToList(), vin.Take(index).ToList()); //递归右子树 tree.right = reConstructBinaryTree(pre.Skip(index+1).ToList(), vin.Skip(index+1).ToList()); return tree; } }
1、通过前序遍历找到根节点
2、通过中序遍历找到左右子树
3、递归左子树和右子树