1102. Invert a Binary Tree (25)【二叉树】——PAT (Advanced Level) Practise

题目信息

1102. Invert a Binary Tree (25)

时间限制400 ms

内存限制65536 kB

代码长度限制16000 B

The following is from Max Howell @twitter:

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

Now it’s your turn to prove that YOU CAN invert a binary tree!

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (<=10) which is the total number of nodes in the tree – and hence the nodes are numbered from 0 to N-1. Then N lines follow, each corresponds to a node from 0 to N-1, and gives the indices of the left and right children of the node. If the child does not exist, a “-” will be put at the position. Any pair of children are separated by a space.

Output Specification:

For each test case, print in the first line the level-order, and then in the second line the in-order traversal sequences of the inverted tree. There must be exactly one space between any adjacent numbers, and no extra space at the end of the line.

Sample Input:

8

1 -

- -

0 -

2 7

- -

- -

5 -

4 6

Sample Output:

3 7 2 6 4 0 5 1

6 5 7 4 3 2 0 1

解题思路

二叉树遍历

AC代码

#include <cstdio>
#include <vector>
#include <set>
using namespace std;
vector<int> level[15];
vector<int> inorder;
int get(){
    char s[10];
    scanf("%s", s);
    if (s[0] == ‘-‘) return -1;
    int a;
    sscanf(s, "%d", &a);
    return a;
}
int L[15], R[15];
void inOrder(int root){
    if (R[root] != -1) inOrder(R[root]);
    inorder.push_back(root);
    if (L[root] != -1) inOrder(L[root]);
}
void levelOrder(int root, int lv){
    level[lv].push_back(root);
    if (R[root] != -1) levelOrder(R[root], lv + 1);
    if (L[root] != -1) levelOrder(L[root], lv + 1);
}
int main()
{
    int n;
    scanf("%d", &n);
    set<int> st;
    for (int i = 0; i < n; ++i){
        st.insert(i);
    }
    for (int i = 0; i < n; ++i){
        L[i] = get();
        R[i] = get();
        if (L[i] != -1) st.erase(L[i]);
        if (R[i] != -1) st.erase(R[i]);
    }
    levelOrder(*st.begin(), 0);
    inOrder(*st.begin());
    printf("%d", *st.begin());
    for (int i = 1; i < 15; ++i){
        for (int j = 0; j < level[i].size(); ++j){
            printf(" %d", level[i][j]);
        }
    }
    printf("\n%d", inorder[0]);
    for (int i = 1; i < inorder.size(); ++i){
        printf(" %d", inorder[i]);
    }
    return 0;
}
时间: 2024-10-11 05:07:55

1102. Invert a Binary Tree (25)【二叉树】——PAT (Advanced Level) Practise的相关文章

PAT Advanced 1102 Invert a Binary Tree (25分)

The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote (Homebrew), but you can't invert a binary tree on a whiteboard so fuck off. Now it's your turn to prove that YOU CAN invert a binary tree! Input Specif

1102. Invert a Binary Tree (25)

The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote (Homebrew), but you can't invert a binary tree on a whiteboard so fuck off. Now it's your turn to prove that YOU CAN invert a binary tree! Input Specif

PAT (Advanced Level) 1102. Invert a Binary Tree (25)

简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<queue> #include<stack> #include<algorithm> using namespace std; struct Node { int left; int right; }s[20]; int

1102 Invert a Binary Tree (25 分)dfs+层序+中序+后序遍历

1102 Invert a Binary Tree (25 分) The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote (Homebrew), but you can't invert a binary tree on a whiteboard so fuck off. Now it's your turn to prove that YOU CAN i

1093. Count PAT&#39;s (25)【计数】——PAT (Advanced Level) Practise

题目信息 1093. Count PAT's (25) 时间限制120 ms 内存限制65536 kB 代码长度限制16000 B The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and the 6th characters, and the second one is formed by the 3rd, the 4th, and the 6th c

1043. Is It a Binary Search Tree (25)【二叉树】——PAT (Advanced Level) Practise

题目信息 1043. Is It a Binary Search Tree (25) 时间限制400 ms 内存限制65536 kB 代码长度限制16000 B A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than

1086. Tree Traversals Again (25)【二叉树】——PAT (Advanced Level) Practise

题目信息 1086. Tree Traversals Again (25) 时间限制200 ms 内存限制65536 kB 代码长度限制16000 B An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to

1099. Build A Binary Search Tree (30)【二叉树】——PAT (Advanced Level) Practise

题目信息 1099. Build A Binary Search Tree (30) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than

1064. Complete Binary Search Tree (30)【二叉树】——PAT (Advanced Level) Practise

题目信息 1064. Complete Binary Search Tree (30) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less tha