「剣はオファーを指す」-26、二分探索木と二重リンクリスト

1.この質問の知識ポイント

2.タイトルの説明

二分探索木を入力し、二分探索木をソートされた二重リンクリストに変換します。新しいノードを作成できず、ツリー内のノードポインタのポイントのみを調整できる必要があります。

3.問題解決のアイデア

二分探索木をトラバースするには、ArrayListクラスを使用してトラバーサルの結果を保存し、最後にポインターを変更します。

4.コード

public class TreeNode {
    
    
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
    
    
        this.val = val;

    }
}
import java.util.ArrayList;

public class Solution {
    
    
    ArrayList<TreeNode> list = new ArrayList<>();

    public TreeNode Convert(TreeNode pRootOfTree) {
    
    
        if (pRootOfTree == null) {
    
    
            return null;
        }
        InOrderTraverse(pRootOfTree);
        // 修改指针
        for (int i = 0; i < list.size() - 1; i++) {
    
    
            list.get(i).right = list.get(i + 1);
            list.get(i + 1).left = list.get(i);
        }
        return list.get(0);
    }

    // 中序遍历二叉搜索树,然后用一个 ArrayList 类保存遍历的结果
    public void InOrderTraverse(TreeNode pRootOfTree) {
    
    
        if (pRootOfTree.left != null) {
    
    
            InOrderTraverse(pRootOfTree.left);
        }
        list.add(pRootOfTree);
        if (pRootOfTree.right != null) {
    
    
            InOrderTraverse(pRootOfTree.right);
        }
    }
}

おすすめ

転載: blog.csdn.net/bm1998/article/details/112986690