【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的二叉搜索樹推一遍就行了,遞歸不多

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