概述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
代码:
package offer;
class BineryTreeNode
{
int val;
BineryTreeNode left = null;
BineryTreeNode right = null;
BineryTreeNode(int val)
{
this.val = val;
}
}
public class ti36 {
private static BineryTreeNode pre = null; //保存当前节点的前一个节点
private static BineryTreeNode head = null;//保存链表的头结点
public static BineryTreeNode Convert(BineryTreeNode pRootOfTree) {
if(pRootOfTree==null) return null;
inOrder(pRootOfTree);
return head;
}
private static void inOrder(BineryTreeNode node) {
if (node == null) return;
System.out.println(node.val);
inOrder(node.left);
node.left = pre;
if (pre != null) pre.right = node;
pre = node;
if (head == null) head = node;
inOrder(node.right);
}
public static void main(String[] args)
{
/*BineryTreeNode a = new BineryTreeNode(10);
BineryTreeNode b = new BineryTreeNode(6);
BineryTreeNode c = new BineryTreeNode(14);
BineryTreeNode d = new BineryTreeNode(4);
BineryTreeNode e = new BineryTreeNode(8);
BineryTreeNode f = new BineryTreeNode(12);
BineryTreeNode g = new BineryTreeNode(16);
a.left = b;
a.right = c;
b.left = d;
b.right = e;
c.left = f;
c.right = g;*/
BineryTreeNode a = new BineryTreeNode(4);
BineryTreeNode b = new BineryTreeNode(2);
BineryTreeNode c = new BineryTreeNode(5);
BineryTreeNode d = new BineryTreeNode(1);
BineryTreeNode e = new BineryTreeNode(3);
a.left = b;
a.right = c;
b.left = d;
b.right = e;
BineryTreeNode result = Convert(a);
}
}
最后
以上就是刻苦飞机为你收集整理的【剑指offer】面试题36:二叉搜索树与双向链表(java)的全部内容,希望文章能够帮你解决【剑指offer】面试题36:二叉搜索树与双向链表(java)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复