1.使用一个集合存放遍历的元素。
前序遍历:(根–左–右)
public int preTraversal(TreeNode root){
List<Integer> list=new ArrayList<>();
helper(root,list);
return list;
}
private void helper(TreeNode root,List<Integer> list){
if(root == null) return;
list.add(root.val);
if(root.left != null) helper(root.left,list);
if(root.right != null) hepler(root.right,list);
}
中序遍历
public int preTraversal(TreeNode root){
List<Integer> list=new ArrayList<>();
helper(root,list);
return list;
}
private void helper(TreeNode root,List<Integer> list){
if(root == null) return;
if(root.left != null) helper(root.left,list);
list.add(root.val);
if(root.right != null) hepler(root.right,list);
}
后序遍历:
public int preTraversal(TreeNode root){
List<Integer> list=new ArrayList<>();
helper(root,list);
return list;
}
private void helper(TreeNode root,List<Integer> list){
if(root == null) return;
if(root.left != null) helper(root.left,list);
if(root.right != null) hepler(root.right,list);
list.add(root.val);
}
重建二叉树:
根据某二叉树的前序和中序遍历的结果,构建二叉树并返回其根节点。
分治算法思想:将一个规模为N的问题分解为k个小规模的问题。
1.建立根节点
2.构建左右子树
根据根节点划分左右子树。
怎么划分左右子树?
根据左子树/右子树的根节点、左边界、右边界来递归构造左右子树。
先建一个哈希表dic存储中序遍历的值和索引的映射。
HashMap<Integer,Integer> dic=new HashMap<>();