剑指offer21 JZ36 二叉搜索树与双向链表

二叉搜索树与双向链表

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=23253&ru=/exam/oj/ta&qru=/ta/coding-interviews/question-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D13%26type%3D13

题目要求生成的双向链表,是二叉搜索的中序遍历结果(从小到大的顺序),对遍历的结果修改左右结点指向。 具体的指针变化,如图 树结构指针,叶子结点的左右指针指向都为空; alt
生成的双向链表结点指针;

  1. 第一次 alt
  2. 第二次 alt

解题思路 变种的中序的遍历

  1. 使用二叉树的中序遍历可以获得一个要求链表结点的访问顺序;
  2. 在这个顺序中,我们要存储当前的结点cur和访问前的结点pre(cur的值一定是比pre小的),
  3. 修改pre和cur的左右指向,cur.right = pre; pre.left = cur;
/**
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 {
  TreeNode cur=null;
    TreeNode head=null;
    public TreeNode Convert(TreeNode pRootOfTree) {
        if(pRootOfTree==null){
            return null;
        }
        Convert(pRootOfTree.left);
        if(cur==null){
            //此时为最左节点  也就是头节点
            head=pRootOfTree;//保存头节点 
            cur=pRootOfTree;//记录头节点 方便操作
        }else{
            //不是最左节点(修改指向)
           cur.right=pRootOfTree;
           pRootOfTree.left=cur;
            cur=pRootOfTree;
        }
        Convert(pRootOfTree.right);
        return head;
    }
}
全部评论

相关推荐

05-30 18:54
武汉商学院 Java
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务