欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

題解 | #1098. Insertion or Heap Sort (25)#

Build A Binary Search Tree (30)

http://fangfengwang8.cn/questionTerminal/e89e5714212a4625952d6a248316bfd3


更多PAT甲級詳解--acking-you.github.io

題目


OJ平臺

題目大意

文章文字那么長,主要就掌握三點:

  1. 輸入給到二叉搜索樹的樹形結(jié)構(gòu)。
  2. 給出一堆數(shù)據(jù)填入這些結(jié)點中,使其滿足二叉搜索樹。
  3. 按層序遍歷輸出二叉搜索樹的數(shù)據(jù)。
  • 好了,我們清楚了這三點后,我們最關(guān)鍵的就在于怎么把這棵樹填充成二叉搜索樹?

由于二叉搜索樹的性質(zhì),它的中序遍歷正好就是從小到大的序列,誒!這不正好可以利用這個性質(zhì)來賦值嗎?我們直接把給的數(shù)據(jù)排序,然后根據(jù)中序遍歷的順序進行賦值即可!

代碼詳解

輸入輸出前的準備

所需變量:

int N;
int* nums; //用于動態(tài)分配掌握全局
int tot = 0;//游標用于賦值
queue<int>Q;//用于層序遍歷輸出答案
struct node { //每個樹的結(jié)點(其實也可以設(shè)為動態(tài)
    int val, l, r;
    node(): val(0), l(-1), r(-1) {}
} Treenode[101];

輸入的處理

Input函數(shù)

//@輸入處理
void Input() {
    ios::sync_with_stdio(false);
    cin >> N;
    for (int i = 0; i < N; i++) { //由圖中可知,這個左右子樹編號正好是根據(jù)這個序號來給的
        cin >> Treenode[i].l >> Treenode[i].r;
    }
    nums = new int[N];//申請內(nèi)存存儲每個結(jié)點的值
    for (int i = 0; i < N; ++i) {
        cin >> nums[i];
    }
    sort(nums, nums + N); //由于我們已經(jīng)知道二叉搜索樹的樹形結(jié)構(gòu),而它的值是遵循中序遍歷遞增的規(guī)律的
}

輸出的處理

//@中序賦值
void Inorder(int node) {
    if (node == -1)
        return;
    Inorder(Treenode[node].l);//左子樹
    Treenode[node].val = nums[tot++];
    Inorder(Treenode[node].r);//右子樹
}

//@BFS打印
void print() {
    Q.push(0);
    while (!Q.empty()) {
        int node = Q.front(); Q.pop();
        if (Treenode[node].l != -1)
            Q.push(Treenode[node].l);
        if (Treenode[node].r != -1)
            Q.push(Treenode[node].r);
        cout << Treenode[node].val;
        if (!Q.empty())
            cout << ' ';
    }
}

整合代碼提交

效率還行!

#include <bits/stdc++.h>
using namespace std;
//利用二叉搜索樹的性質(zhì)--中序遍歷的序列是遞增序列
int N;
int *nums;
int tot = 0;//游標用于賦值
queue<int> Q;//用于最后層序遍歷輸出答案
struct node {
    int val, l, r;
    node() : val(0), l(-1), r(-1) {}
} Treenode[101];

//@輸入處理
void Input() {
    ios::sync_with_stdio(false);
    cin >> N;
    for (int i = 0; i < N; i++) {//由圖中可知,這個左右子樹編號正好是根據(jù)這個序號來給的
        cin >> Treenode[i].l >> Treenode[i].r;
    }
    nums = new int[N];//申請內(nèi)存存儲每個結(jié)點的值
    for (int i = 0; i < N; ++i) {
        cin >> nums[i];
    }
    sort(nums, nums + N);//由于我們已經(jīng)知道二叉搜索樹的樹形結(jié)構(gòu),而它的值是遵循中序遍歷遞增的規(guī)律的
}

//@中序賦值
void Inorder(int node) {
    if (node == -1)
        return;
    Inorder(Treenode[node].l);//左子樹
    Treenode[node].val = nums[tot++];
    Inorder(Treenode[node].r);//右子樹
}

//@BFS打印
void print() {
    Q.push(0);
    while (!Q.empty()) {
        int node = Q.front();
        Q.pop();
        if (Treenode[node].l != -1)
            Q.push(Treenode[node].l);
        if (Treenode[node].r != -1)
            Q.push(Treenode[node].r);
        cout << Treenode[node].val;
        if (!Q.empty())
            cout << ' ';
    }
}

int main() {
    Input();
    Inorder(0);
    print();
    return 0;
}
全部評論

相關(guān)推薦

???83549203號:騰訊還好,況且實習而已,實習生流動性很大,屬于正常現(xiàn)象,記得和HR委婉解釋
點贊 評論 收藏
分享
程序員牛肉:主要是因為小廠的資金本來就很吃緊,所以更喜歡有實習經(jīng)歷的同學。來了就能上手。 而大廠因為錢多,實習生一天三四百的就不算事。所以愿意培養(yǎng)你,在面試的時候也就不在乎你有沒有實習(除非是同級別大廠的實習。) 按照你的簡歷來看,同質(zhì)化太嚴重了。項目也很爛大街。 要么換項目,要么考研。 你現(xiàn)在選擇工作的話,前景不是很好了。
點贊 評論 收藏
分享
評論
點贊
收藏
分享

創(chuàng)作者周榜

更多
??途W(wǎng)
??推髽I(yè)服務(wù)