题目链接
思路:中序遍历
分析:这个题目就是中序遍历,题目说了,左指针指向前驱,右指针指向后继,那么我们只需要两个指针,一个是前驱指针,一个是当前节点的指针,按照中序遍历,访问的操作就是当前节点的左节点指向前一个节点,前一个节点的右节点指向当前节点,更新前一个节点为当前节点。
简单说就是:中序遍历的访问操作改变一下更新相关指针即可。
代码:
class Solution {
Node head = null;
Node pre = null;
public Node treeToDoublyList(Node root) {
if(root==null){
return root;
}
helper(root);
head.left = pre;
pre.right = head;
return head;
}
//中序遍历
public void helper(Node curNode){
if(curNode.left!=null){
helper(curNode.left);
}
visitII(curNode);
if(curNode.right!=null){
helper(curNode.right);
}
}
//访问操作
private void visitII(Node curNode) {
//如果前一个节点为null,那么就说明是第一次访问节点,这个节点就是头节点
if(pre==null){
head = curNode;
}else{
//否则就前一个节点的右节点指向当前节点
pre.right = curNode;
}
//当前节点的左节点指向前节点
curNode.left = pre;
//更新前一个节点
pre = curNode;
}
}
好好学习。
不打扰是我的温柔。