【LeetCode】BiNode

题目描述

二叉树数据结构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的二叉搜索树推一遍就行了,递归不多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章