思路
二叉搜索树的特点是左<根<右
- 中序遍历结点,用一个数组或者队列存储中序遍历的顺序
- 线索二叉树,比当前结点小的结点中的最大结点是当前结点的前驱结点,相应的另外一个就是后继结点,所以这题就是找到每一个结点的前驱和后继节点,其实就是线索二叉树了
代码
中序遍历
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ import java.util.*; public class Solution { ArrayList<TreeNode> arr=new ArrayList<>(); public TreeNode Convert(TreeNode pRootOfTree) { if(pRootOfTree==null){return pRootOfTree;} mid(pRootOfTree); TreeNode head=arr.get(0); for(int i=0;i<arr.size()-1;i++){ arr.get(i+1).left=arr.get(i); arr.get(i).right=arr.get(i+1); } arr.get(0).left=null; arr.get(arr.size()-1).right=null; return head; } public void mid(TreeNode root){ if(root==null){ return; } mid(root.left); arr.add(root); mid(root.right); } }