【九度OJ1521】|【劍指offer19】二叉樹的鏡像

題目描述:

輸入一個二叉樹,輸出其鏡像。 java

輸入:

輸入可能包含多個測試樣例,輸入以EOF結束。
對於每一個測試案例,輸入的第一行爲一個整數n(0<=n<=1000,n表明將要輸入的二叉樹節點的個數(節點從1開始編號)。接下來一行有n個數字,表明第i個二叉樹節點的元素的值。接下來有n行,每行有一個字母Ci。
Ci=’d’表示第i個節點有兩子孩子,緊接着是左孩子編號和右孩子編號。
Ci=’l’表示第i個節點有一個左孩子,緊接着是左孩子的編號。
Ci=’r’表示第i個節點有一個右孩子,緊接着是右孩子的編號。
Ci=’z’表示第i個節點沒有子孩子。 測試

輸出:

對應每一個測試案例,
按照前序輸出其孩子節點的元素值。
若爲空輸出NULL。 this

樣例輸入:
7
8 6 10 5 7 9 11
d 2 3
d 4 5
d 6 7
z
z
z
z
樣例輸出:
8 10 11 9 6 7 5
解:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
 
public class Main {
    public int data;
    public Main left = null;
    public Main right = null;
    public static int n;
 
    public Main(int data) {
        this.data = data;
    }
 
    public static Main find(int data, Main root) {
        if (root == null)
            return null;
        if (root.data == data)
            return root;
        Main m = find(data, root.left);
        if (m == null) {
            return find(data, root.right);
        }
        return m;
    }
 
    public static void print(Main root) {
        if (root != null) {
            n--;
            if (n == 0)
                System.out.println(root.data);
            else
                System.out.print(root.data + " ");
            print(root.right);
            print(root.left);
        }
    }
 
    public static void main(String[] args) throws IOException {
        StreamTokenizer st = new StreamTokenizer(new BufferedReader(
                new InputStreamReader(System.in)));
        while (st.nextToken() != StreamTokenizer.TT_EOF) {
            int n = (int) st.nval;
            if (n == 0)
                System.out.println("NULL");
            else {
                int[] array = new int[n];
                for (int i = 0; i < n; i++) {
                    st.nextToken();
                    array[i] = (int) st.nval;
                }
                Main root = new Main(array[0]);
                for (int i = 0; i < n; i++) {
                    Main m = Main.find(array[i], root);
                    st.nextToken();
                    String o = st.sval;
                    if (o.equals("d")) {
                        st.nextToken();
                        int p = (int) st.nval;
                        m.left = new Main(array[p - 1]);
                        st.nextToken();
                        p = (int) st.nval;
                        m.right = new Main(array[p - 1]);
                    } else if (o.equals("l")) {
                        st.nextToken();
                        int p = (int) st.nval;
                        m = Main.find(array[i], root);
                        m.left = new Main(array[p - 1]);
                    } else if (o.equals("r")) {
                        st.nextToken();
                        int p = (int) st.nval;
                        m = Main.find(array[i], root);
                        m.right = new Main(array[p - 1]);
                    }
                }
                Main.n = n;
                Main.print(root);
            }
        }
    }
 
}
/**************************************************************
    Problem: 1521
    User: aqia358
    Language: Java
    Result: Accepted
    Time:340 ms
    Memory:14748 kb
****************************************************************/
相關文章
相關標籤/搜索