zoukankan      html  css  js  c++  java
  • 面试题:二叉树与双向搜索树

    题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

    思路1:递归

    public class Solution{
        public TreeNode Convert(TreeNode root){
            if(root==null)return null;
            if(root.left==null&&root.right==null)return root;
            TreeNode left=Convert(root.left);//
            TreeNode p=left;
            while(p!=null&&p.right!=null){//左节点最右侧的值
                p=p.right;
            }
            if(left!=null){
             p.right=root;
              root.left=p;
            }
           TreeNode right=Convert(root.right);
           if(right!=null){
                root.right=right;
                right.left=root;
           }
          return left!=null?left:root; 
        }
    }

    思路2:中序遍历

    public class Solution {
        TreeNode head = null;
        TreeNode realHead = null;
        public TreeNode Convert(TreeNode pRootOfTree) {
            ConvertSub(pRootOfTree);
            return realHead;
        }
         
        private void ConvertSub(TreeNode pRootOfTree) {
            if(pRootOfTree==null) return;
            ConvertSub(pRootOfTree.left);
            if (head == null) {
                head = pRootOfTree;
                realHead = pRootOfTree;
            } else {
                head.right = pRootOfTree;
                pRootOfTree.left = head;
                head = pRootOfTree;
            }
            ConvertSub(pRootOfTree.right);
        }
    }
  • 相关阅读:
    网络流 学习笔记
    回文自动机PAM 学习笔记
    后缀自动机SAM 学习笔记
    题解 CF1207G Indie Album
    题解 CF163E e-Government
    AC自动机 学习笔记
    CCF冬令营Day1上午
    不编译AC记录
    生成函数 抄写笔记
    FFT NTT 学习笔记
  • 原文地址:https://www.cnblogs.com/Aaron12/p/9535377.html
Copyright © 2011-2022 走看看