1. 程式人生 > 實用技巧 >Leetcode316.去除重複字母

Leetcode316.去除重複字母

概念

二叉樹的遍歷有 先序、中序、後續遍歷

  • 先序遍歷
    當前節點 - 左子節點 - 右子節點
    a-b-d-e-c-f
  • 中序遍歷
    左子節點 - 當前節點 - 右子節點
    d-b-e-a-f-c
  • 後續遍歷
    左子節點 - 右子節點 - 當前節點
    d-e-b-f-c-a

遞迴方式遍歷

這種方式比較簡單

// 先序遍歷
public static List visitBefore(BinaryNode root)
{
    List list = new ArrayList<>();
    if (root == null)
    {
        return new ArrayList<>();
    }
    list.add(root.getData());
    // 遍歷左子樹
    list.addAll(visitBefore(root.getLeft()));
    // 遍歷右子樹
    list.addAll(visitBefore(root.getRight()));
    return list;
}

// 中序遍歷
public static List visitMiddle(BinaryNode root)
{
    List list = new ArrayList<>();
    if (root == null)
    {
        return new ArrayList<>();
    }
    // 遍歷左子樹
    list.addAll(visitMiddle(root.getLeft()));
    list.add(root.getData());
    // 遍歷右子樹
    list.addAll(visitMiddle(root.getRight()));
    return list;
}
// 後序遍歷
public static List visitAfter(BinaryNode root)
{
    List list = new ArrayList<>();
    if (root == null)
    {
        return new ArrayList<>();
    }
    // 遍歷左子樹
    list.addAll(visitAfter(root.getLeft()));
    // 遍歷右子樹
    list.addAll(visitAfter(root.getRight()));
    list.add(root.getData());
    return list;
}

非遞迴方式遍歷