博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉搜索树与双向链表
阅读量:5773 次
发布时间:2019-06-18

本文共 1275 字,大约阅读时间需要 4 分钟。

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

思路:二叉搜索树中序遍历就是有序序列,把整个树拆成3部分,根,左子树,右子树。连接起来应该是,左子树的最右叶子节点的右指针指向根,根的左指针指向左子树最右节点,根的右指针指向右子树的最左节点,右子树的最左节点的左指针指向根。然后递归遍历。最后判断左子树的最左节点是否为null,如果为null则返回根。

实现代码:

/**public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {    public TreeNode Convert(TreeNode pRootOfTree) {        if(pRootOfTree == null)            return null;        if(pRootOfTree.left == null && pRootOfTree.right == null)            return pRootOfTree;                TreeNode leftNode = Convert(pRootOfTree.left);        TreeNode curNode = leftNode;        //找到左子树最右边的叶子节点        while(curNode != null && curNode.right != null) {            curNode = curNode.right;        }        //连接根节点与左子树的最右叶子节点        if(leftNode != null) {            pRootOfTree.left = curNode;            curNode.right = pRootOfTree;        }                //右子树的最左叶子节点        TreeNode rightNode = Convert(pRootOfTree.right);        //连接根节点与右子树的最左叶子节点        if(rightNode != null) {            pRootOfTree.right = rightNode;            rightNode.left = pRootOfTree;        }        //考虑没有左子树的情况        return leftNode==null?pRootOfTree:leftNode;    }}

 

转载地址:http://tvaux.baihongyu.com/

你可能感兴趣的文章
B. Little Dima and Equation
查看>>
iOS开发数据库篇—SQL
查看>>
转:HTTP/2 新特性浅析
查看>>
centos关闭邮件提醒
查看>>
React Native资料收集
查看>>
jquery javascript获得网页的高度和宽度
查看>>
barrier()函数
查看>>
(十八)js控制台方法
查看>>
VB关键字总结
查看>>
虚拟机类加载机制
查看>>
android代码生成jar包并混淆
查看>>
Java基础2-基本语法
查看>>
SPI总线通信电路设计
查看>>
一个不错的vue项目
查看>>
屏蔽指定IP访问网站
查看>>
[leetcode] 237. Delete Node in a Linked List
查看>>
python学习 第一天
查看>>
根据毫秒数计算出当前的“年/月/日/时/分/秒/星期”并不是件容易的事
查看>>
python的图形模块PIL小记
查看>>
shell变量子串
查看>>