二叉树遍历
前序 中左右
中序 左中右
后序 左右中
这个大家都熟知的一个遍历规则,解题思路肯定是要参考前序或者中序其中一个去进行查找遍历,那么重点就是怎么更容易确定根节点,所以我们选择已前序为基准,因为前序的第一个节点肯定是根节点,每次都去中序中找对应的根节点下标值,最后递归左右节点
/**
* 思路
* 1、创建一个根节点
* 2、每次从前序的头找出根节点在中序遍历中所在的位置,中序的左为左节点,右边为右节点
* 3、对左右节点进行递归
* @param preorder
* @param inorder
*/
let buildTree = function (preorder, inorder) {
if (!preorder.length || !inorder.length) return null
// 创建根节点
const node = new TreeNode(preorder[0])
// 从前序遍历中的头找出下标
const index = inorder.indexOf(preorder.shift())
//左右子树递归
node.left = buildTree(preorder, inorder.slice(0, index))
node.right = buildTree(preorder, inorder.slice(index + 1))
return node
}
延伸一下 中序后序遍历构造二叉树
原理相同
let buildTree = function (preorder, inorder) {
if (!preorder.length || !inorder.length) return null
// 创建根节点
const node = new TreeNode(preorder[0])
// 从前序遍历中的头找出下标
const index = inorder.indexOf(preorder.shift())
//左右子树递归
node.left = buildTree(preorder, inorder.slice(0, index))
node.right = buildTree(preorder, inorder.slice(index + 1))
return node
}