import java.util.*; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { // 重点在于使用pre来保存当前节点的前一个节点 public TreeNode head = null; public TreeNode pre = null; public TreeNode Convert(TreeNode pRootOfTree) { // 整体的思路还是中序遍历递归,先Convert(root.left)再写逻辑处理,最后递归遍历右子树Convert(root.rieght) // 最重要的是通过pre记录前一个节点,类似每个节点都与自身的父节点相连 if(pRootOfTree == null) return null; // 首先递归到最左最小值 Convert(pRootOfTree.left); if(pre == null){ head = pRootOfTree; pre = pRootOfTree; } // 当前节点与上一节点建立连接,将pre设置为当前值 else{ // right连接后继节点 pre.right = pRootOfTree; pRootOfTree.left = pre; pre = pRootOfTree; } Convert(pRootOfTree.right); return head; } }