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);
    	}
    }
    

      

  • 相关阅读:
    如何判断点击是否在区域内
    WCF SSL(应用篇-Message)-02
    WCF SSL(证书篇)-01
    获取浏览客户的地址信息
    ASP.Net Controls 用法大全
    C#实现倒油算法
    C#操作Excel(读取)
    C#提取字符串中的数字字符串
    对比MFC和Winform及WPF
    C#图片水印代码整理
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/9055377.html
Copyright © 2011-2022 走看看