zoukankan      html  css  js  c++  java
  • 剑指offer--二叉搜索树与双向链表

    /**
     * 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
     * 要求不能创建任何新的结点,只能调整树中结点指针的指向。
     */
    package javabasic.nowcoder;
    
    /*
     * 采用中序遍历
    修改中序遍历,在其中加入一个前驱结点
    遍历左子树
    当前结点指向左指针指向前驱结点
    前驱结点右指针指向当前结点
    前驱 = 当前
    遍历右子树
     */
    public class Main31 {
    
    	//双向链表的左边头结点和右边头结点
    	TreeNode head = null;
    	TreeNode realHead = null;
    	public TreeNode Convert(TreeNode pRootOfTree) {
    		ConvertSub(pRootOfTree);
    		return realHead;
        }
    
    	private void ConvertSub(TreeNode pRootOfTree) {
    		//递归调用叶子节点的左右节点返回null
    		if(pRootOfTree==null)
    			return ;
    		//第一次运行时,它会使最左边叶子节点为链表第一个节点
    		ConvertSub(pRootOfTree.left);
    		if(head == null) {
    			head = pRootOfTree;
    			realHead = pRootOfTree;
    		}else {
    			//把根节点插入到双向链表的头结点,head向后移动
    			head.right = pRootOfTree;
    			pRootOfTree.left = head;
    			head = pRootOfTree;
    		}
    		//把右叶子节点也插入到双向链表
    		ConvertSub(pRootOfTree.right);
    	}
    }
    

      

  • 相关阅读:
    初识多线程
    java开发中我们经常用到的一些名词
    gitHub提交代码
    Java-基础-HashMap
    Java-基础-LinkedList
    Java-基础-ArrayList
    Java-基础-JDK动态代理
    Java-基础-反射
    RabbitMQ-延迟队列
    RabbitMQ-TTL-死信队列_DLX
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/9055377.html
Copyright © 2011-2022 走看看