1. 程式人生 > >排序二叉樹的建立注意重複元素

排序二叉樹的建立注意重複元素

think:
1建立排序二叉樹時 注意重複元素
sdut原題連結
樹結構練習——排序二叉樹的中序遍歷
Time Limit: 1000MS Memory Limit: 65536KB

Problem Description
在樹結構中,有一種特殊的二叉樹叫做排序二叉樹,直觀的理解就是——(1).每個節點中包含有一個關鍵值 (2).任意一個節點的左子樹(如果存在的話)的關鍵值小於該節點的關鍵值 (3).任意一個節點的右子樹(如果存在的話)的關鍵值大於該節點的關鍵值。現給定一組資料,請你對這組資料按給定順序建立一棵排序二叉樹,並輸出其中序遍歷的結果。

Input
輸入包含多組資料,每組資料格式如下。
第一行包含一個整數n,為關鍵值的個數,關鍵值用整數表示。(n<=1000)
第二行包含n個整數,保證每個整數在int範圍之內。

Output
為給定的資料建立排序二叉樹,並輸出其中序遍歷結果,每個輸出佔一行。

Example Input
1
2
2
1 20

Example Output
2
1 20

Hint
1 注意重複元素
Author
趙利強

以下為accepted程式碼

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct node
{
    int date;
    struct node *left;
    struct node *right;
} BinTree;
int
flag, n, a[1400]; BinTree * Insert(BinTree *rt, int x)//二叉搜尋樹的建立演算法 { if(!rt) /* 若原樹為空,生成並返回一個結點的二叉搜尋樹*/ { rt = (BinTree *)malloc(sizeof(BinTree)); rt->date = x; rt->left = rt->right = NULL; } else /* 開始找要插入元素的位置*/ { if(x < rt->date) rt->left = Insert(rt->left, x);//遞迴插入左子樹
///else if(x > rt->date)/*wrong answer*/ else rt->right = Insert(rt->right, x);//遞迴插入右子樹 } return rt; } void mid_put(BinTree *rt)//中序遍歷演算法 { if(rt) { mid_put(rt->left);//左子樹遞迴 a[flag++] = rt->date; mid_put(rt->right);//右子樹遞迴 } } int main() { int i, x; while(scanf("%d", &n) != EOF) { if(n > 0) { BinTree *root = NULL; flag = 0; for(i = 0; i < n; i++) { scanf("%d", &x); root = Insert(root, x); } mid_put(root); for(i = 0; i < flag; i++) { printf("%d%c", a[i], i == flag-1? '\n': ' '); } } } return 0; } /*************************************************** User name: jk160630 Result: Accepted Take time: 0ms Take Memory: 128KB Submit time: 2017-02-08 17:07:08 ****************************************************/

相關推薦

排序建立注意重複元素

think: 1建立排序二叉樹時 注意重複元素 sdut原題連結 樹結構練習——排序二叉樹的中序遍歷 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 在樹結構中,有一種特殊的二

排序建立,查詢與刪除

因為排序二叉樹的有序性,建立與查詢都不是很難,唯一的難點是刪除結點的操作,刪除節點且要保證該樹仍為二叉樹且仍滿足有序的性質 二叉樹的刪除操作主要有三種情況: 所刪除的節點是葉子節點,這樣就可以先遍歷這個樹,然後找到需要刪除的節點,把它free掉就好 所刪除的節點只有一個左子結點,或者只有一個右子

建立排序並中序遍歷

分析:中序遍歷也叫中根遍歷,顧名思義是把根節點放在中間來遍歷,其遍歷順序為左子節點–>根節點–>右子節點。 方法一: #include<iostream> using nam

白話篇:零姿勢實現排序建立與查詢

前篇: 二叉排序樹還有很高比各的名字:二叉查詢樹,二叉搜尋樹。 為什麼這麼稱為呢? 我們來看下二叉樹的定義: 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; (2)若右子樹不空,則右子樹上所有結

建立和遍歷

mil inorder 推斷 microsoft con 是否 font pac node 二叉樹創建遍歷規則: 1.先序:根-左-右 2.中序:左-根-右 3.後序:左-右-根 二叉樹定義和輔助函數例如以下: struct node {

實現排序

eno -type lis blank 後者 升序 以及 代碼 細節 概念 二叉樹:如圖。 某個節點最多有兩個子節點的樹。常用於排序。效率較高。 節點中的值:鍵。key。 兄弟節點:擁有同一個父節點的節點。 根節點:沒有父節點 外部節點:葉子節點,沒有子節點。 內部節點:

創建排序

null while bit 排序 pre ron else for 相等 全部代碼 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <assert.h> 4

排序節點的刪除

for 臨時 sse 刪除節點 bsp != == tro 二叉樹 全部代碼 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <assert.h> 4 5

JavaScript實現排序的相關算法

this remove class () 二叉樹 log 最小值 pos max 1.創建排序二叉樹的構造函數 /** * 創建排序二叉樹的構造函數 * @param valArr 排序二叉樹中節點的值 * @cons

Leetcode606.Construct String from Binary Tree根據建立字串

你需要採用前序遍歷的方式,將一個二叉樹轉換成一個由括號和整陣列成的字串。 空節點則用一對空括號 "()" 表示。而且你需要省略所有不影響字串與原始二叉樹之間的一對一對映關係的空括號對。 示例 1: 輸入: 二叉樹: [1,2,3,4]      

建立、先序遍歷、中序遍歷、後序遍歷、深度

一、概念:         二叉樹遍歷:按指定的某條搜尋路徑訪問樹中每個結點,使得每個結點均被訪問一次,而且僅被訪問一次。         根節點N,按照先遍歷左子樹L再遍歷右子樹R的原則,常見的有三種:先

606. 根據建立字串

你需要採用前序遍歷的方式,將一個二叉樹轉換成一個由括號和整陣列成的字串。 空節點則用一對空括號 "()" 表示。而且你需要省略所有不影響字串與原始二叉樹之間的一對一對映關係的空括號對。 示例 1: 輸入: 二叉樹: [1,2,3,4] 1 / \ 2

C語言建立(一定看的懂)

  先貼一個百度出來的二叉樹的圖 二叉樹 就是首先得有一個根節點.這個節點的入度為0也就是它只有子節點沒有父節點 如1號節點     每個節點又有一個左兒子和一個右兒子 當然也可以沒有 接下來就是建立.建立一棵樹得現有這棵樹的結點和樹根

演算法導論 之 平衡 - 建立 插入 查詢 銷燬 - 遞迴 C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

6.2.2-1 【指標與引用】在建立的應用

0 引子   本文旨在通過二叉樹的遞迴建立,分析指標與引用,函式形參與實參的具體實現。   二叉樹的遍歷,通常是利用建立好的二叉連結串列的首地址,也即根節點地址。主函式先定義一指標,再通過二叉樹建立函式返回根結點地址,或者將定義的指標作為形參來實現修改。   這就涉及函式形參與實參的呼叫機制。實參賦給形

【省內訓練2018-10-28】排序

【思路要點】 若將一個序列按照元素大小排序,那麼其對應的排序二叉樹即為插入時間對應的笛卡爾樹,並且,被刪除的元素可以視作插入時間為正無窮的元素。 一個點在排序二叉樹上所有的祖先即其左側/右側對應的所有插入時間為後/字首最小值的點。 離線操作,對權值離

C語言--建立問題:指標的指標

自己動手寫二叉樹的建立時出現了一個問題 #include <stdio.h> #include <stdlib.h> typedef struct _BinNode BinNode; struct _BinNode{ char ch; Bin

資料結構--建立,輸出,計算長度-C++

#include<iostream> #include<stdlib.h> using namespace std; typedef struct BTNode BTNode; struct BTNode{ int ch; BTNode * l

第八十六題(搜尋建立

如何編寫一個程式,把一個有序整數陣列放到二叉樹中? 分析:為了讓搜尋二叉樹的查詢等操作接近於O(log(n))。我們以有序陣列的中間位置的數字作為搜尋二叉樹的根節點,以其左半部分資料建立搜尋二叉樹作為根節點的左子樹。以其有半部分資料建立搜尋二叉樹作為根節點的右子樹。這是一個遞

排序演算法七:排序

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include <time.h> #define TR