题解 | #重建二叉树#
重建二叉树
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、递归左子树和右子树
查看9道真题和解析