• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
neverlandly
博客园    首页    新随笔    联系   管理    订阅  订阅

FG面经Prepare: BST to Double LinkedList

BST to double linkedlist in inorder traversal sequence
Follow Up: 如果这个BST自带prev, next, 给一个value,插进去这个node,并补全left,right,prev,next

 

 1 class TreeNode {
 2  public int val;
 3  TreeNode left;
 4  TreeNode right;
 5 }
 6 
 7 TreeNode newRoot
 8 
 9 TreeNode tree2Dll(TreeNode root) {
10   TreeNode pre = null;
11   TreeNode newRoot = null;
12   helper(root, pre);
13   return newRoot;
14 }
15 
16 public void helper(TreeNode cur, TreeNode pre) {
17   if (cur == null) {
18     return;
19   }
20   helper(cur.left, pre);
21   cur.left = pre;
22   if (pre == null) {
23      newRoot = cur;
24   }
25   else pre.right = cur;
26   pre = cur;
27   helper(cur.right, pre, newRoot);
28 }

 

Follow up:

第一步完成基础上,把这个new value插入BST中,一边插入一边记录沿途的大于value的root node(即走了该root node的left child),作为inorder successor. 找到inorder successor之后,通过其prev指针找到inorder predecessor, 改指针就好了

posted @ 2017-02-01 12:46  neverlandly  阅读(487)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3