百度java面试_2018百度java后端面试题目

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

3、把一个 bst 转化成一个双向链表

public class BinaryTreeNode {

private int data;

private BinaryTreeNode leftNode;

private BinaryTreeNode rightNode;

public BinaryTreeNode(int i) {

this.data = i;

}

public static BinaryTreeNode baseconvert(BinaryTreeNode root, BinaryTreeNode lastNode) {

if (root == null)

return lastNode;

BinaryTreeNode current = root;

if (current.leftNode != null)

lastNode = baseconvert(current.leftNode, lastNode);

current.leftNode = lastNode;

if (lastNode != null)

lastNode.rightNode = current;

lastNode = current;

if (current.rightNode != null)

lastNode = baseconvert(current.rightNode, lastNode);

return lastNode;

}

public static BinaryTreeNode convert(BinaryTreeNode root) {

BinaryTreeNode lastNode = null;

lastNode = baseconvert(root, lastNode);

BinaryTreeNode headNode = lastNode;

while (headNode.leftNode != null)

headNode = headNode.leftNode;

return headNode;

}

public static void main(String[] args) {

BinaryTreeNode root = new BinaryTreeNode(10);

BinaryTreeNode six = new BinaryTreeNode(6);

BinaryTreeNode four = new BinaryTreeNode(4);

BinaryTreeNode eight = new BinaryTreeNode(8);

BinaryTreeNode fourteen = new BinaryTreeNode(14);

BinaryTreeNode twelve = new BinaryTreeNode(12);

BinaryTreeNode sixteen = new BinaryTreeNode(16);

root.leftNode = six;

root.rightNode = fourteen;

six.leftNode = four;

six.rightNode = eight;

four.leftNode = null;

four.rightNode = null;

eight.leftNode = null;

eight.rightNode = null;

fourteen.leftNode = twelve;

fourteen.rightNode = sixteen;

twelve.leftNode = null;

twelve.rightNode = null;

sixteen.rightNode = null;

sixteen.leftNode = null;

BinaryTreeNode result = convert(root);

// BinaryTreeNode result=baseconvert(root, null);

while (result != null) {

System.out.println(result.data);

result = result.rightNode;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值