题目描述
二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求值的顺序保持不变,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。
返回转换后的单向链表的头节点。
简单来说就是把二叉搜索树变成链表,不过是原地修改,改完的树只有右边节点
解题思路
中序遍历,根左右
package treenode;
public class convertBiNode {
public static void main(String[] args) {
TreeNode t1 = new TreeNode(1);
TreeNode t2 = new TreeNode(2);
TreeNode t3 = new TreeNode(3);
t2.left = t1;
t2.right = t3;
convertBiNode test = new convertBiNode();
test.convertBiNode(t2);
}
// 定义一个全局头指针
// 不断移动
TreeNode rootNode;
public TreeNode convertBiNode(TreeNode root) {
//头指针实例化
rootNode = new TreeNode(0);
//备份这个头指针
TreeNode headNode = rootNode;
// 开始中序遍历
midOrderRe(root);
//返回二叉树的第一个节点
return headNode.right;
}
public void midOrderRe(TreeNode r) {
//跳出递归的条件
if (r == null) {
return;
}
//中序遍历,根左右
midOrderRe(r.left);
//将root放入链表最后
rootNode.right = r;
//将二叉树中节点原有的left置空
r.left = null;
//指向头指针的最后一节点
rootNode = rootNode.right;
midOrderRe(r.right);
}
}
其实简单画个1,2,3的二叉搜索树推一遍就行了,递归不多