樹葉編程
A. 數據結構編程: 統計二叉樹中葉子結點的個數。
葉子節點:沒有孩子節點的節點
也就是說,當我們明白了葉子節點的定義後,只需要遍歷一遍二叉樹,把符合這種條件(左孩子節點和右孩子節點都為NULL的節點)的節點統計出來就可以了。
於是,實際上這個問題也就轉化成了如何遍歷二叉樹?很顯然,遍歷二叉樹是可以有多種方式的,如:前序遍歷(遞歸/非遞歸)、中序遍歷(遞歸/非遞歸)、後序遍歷(遞歸/非遞歸)、層次遍歷等等。
下面我將給出使用遞歸前序遍歷以及層次遍歷兩種思路實現的求解葉子節點的示例代碼吧,僅供參考。其他幾種實現方式思路類似,可自行嘗試。示例代碼如下:
java">packagecn.zifangsky.tree.questions;
importorg.junit.Test;
importcn.zifangsky.queue.LinkQueue;
importcn.zifangsky.tree.BinaryTreeNode;
/**
*求二叉樹中葉子節點的個數
*@authorAdministrator
*
*/
publicclassQuestion2{
/**
*通過遞歸前序遍歷獲取葉子節點個數
*@paramroot
*@return
*/
(BinaryTreeNoderoot){
if(root==null){
return0;
}else{
if(root.getLeft()==null&&root.getRight()==null){//葉子節點
return1;
}else{
(root.getLeft())+getNumberOfLeavesByPreOrder(root.getRight());
}
}
}
/**
*使用層次遍歷獲取二叉樹葉子節點個數
*
*@時間復雜度O(n)
*@paramroot
*/
(BinaryTreeNoderoot){
intcount=0;//葉子節點總數
LinkQueue<BinaryTreeNode>queue=newLinkQueue<>();
if(root!=null){
queue.enQueue(root);
}
while(!queue.isEmpty()){
BinaryTreeNodetemp=(BinaryTreeNode)queue.deQueue();
//葉子節點:左孩子節點和右孩子節點都為NULL的節點
if(temp.getLeft()==null&&temp.getRight()==null){
count++;
}else{
if(temp.getLeft()!=null){
queue.enQueue(temp.getLeft());
}
if(temp.getRight()!=null){
queue.enQueue(temp.getRight());
}
}
}
returncount;
}
/**
*測試用例
*/
@Test
publicvoidtestMethods(){
/**
*使用隊列構造一個供測試使用的二叉樹
*1
*23
*4567
*89
*/
LinkQueue<BinaryTreeNode>queue=newLinkQueue<BinaryTreeNode>();
BinaryTreeNoderoot=newBinaryTreeNode(1);//根節點
queue.enQueue(root);
BinaryTreeNodetemp=null;
for(inti=2;i<10;i=i+2){
BinaryTreeNodetmpNode1=newBinaryTreeNode(i);
BinaryTreeNodetmpNode2=newBinaryTreeNode(i+1);
temp=(BinaryTreeNode)queue.deQueue();
temp.setLeft(tmpNode1);
temp.setRight(tmpNode2);
if(i!=4)
queue.enQueue(tmpNode1);
queue.enQueue(tmpNode2);
}
System.out.println("葉子節點個數是:"+getNumberOfLeavesByPreOrder(root));
System.out.println("葉子節點個數是:"+getNumberOfLeavesByQueue(root));
}
}
測試代碼輸出如下:
葉子節點個數是:5
葉子節點個數是:5
附:
二叉樹節點BinaryTreeNode的定義:
packagecn.zifangsky.tree;
publicclassBinaryTreeNode{
privateintdata;//數據
privateBinaryTreeNodeleft;//左孩子節點
privateBinaryTreeNoderight;//右孩子節點
publicBinaryTreeNode(intdata){
this.data=data;
}
publicBinaryTreeNode(intdata,BinaryTreeNodeleft,BinaryTreeNoderight){
this.data=data;
this.left=left;
this.right=right;
}
publicintgetData(){
returndata;
}
publicvoidsetData(intdata){
this.data=data;
}
publicBinaryTreeNodegetLeft(){
returnleft;
}
publicvoidsetLeft(BinaryTreeNodeleft){
this.left=left;
}
publicBinaryTreeNodegetRight(){
returnright;
}
publicvoidsetRight(BinaryTreeNoderight){
this.right=right;
}
}
隊列LinkQueue的定義:
packagecn.zifangsky.queue;
importcn.zifangsky.linkedlist.SinglyNode;
/**
*基於單鏈表實現的隊列
*@authorzifangsky
*@param<K>
*/
publicclassLinkQueue<KextendsObject>{
privateSinglyNode<?>frontNode;//隊首節點
privateSinglyNode<?>rearNode;//隊尾節點
publicLinkQueue(){
frontNode=null;
rearNode=null;
}
/**
*返回隊列是否為空
*@時間復雜度O(1)
*@return
*/
publicbooleanisEmpty(){
return(frontNode==null);
}
/**
*返回存儲在隊列的元素個數
*@時間復雜度O(n)
*@return
*/
publicintsize(){
intlength=0;
SinglyNode<?>currentNode=frontNode;
while(currentNode!=null){
length++;
currentNode=currentNode.getNext();
}
returnlength;
}
/**
*入隊:在鏈表表尾插入數據
*@時間復雜度O(1)
*@paramdata
*/
publicvoidenQueue(Kdata){
SinglyNode<K>newNode=newSinglyNode<K>(data);
if(rearNode!=null){
rearNode.setNext(newNode);
}
rearNode=newNode;
if(frontNode==null){
frontNode=rearNode;
}
}
/**
*出隊:刪除表頭節點
*@時間復雜度O(1)
*@return
*/
publicObjectdeQueue(){
if(isEmpty()){
thrownewRuntimeException("QueueEmpty!");
}else{
Objectresult=frontNode.getData();
if(frontNode==rearNode){
frontNode=null;
rearNode=null;
}else{
frontNode=frontNode.getNext();
}
returnresult;
}
}
}
單鏈表節點SinglyNode的定義:
packagecn.zifangsky.linkedlist;
/**
*單鏈表的定義
*@authorzifangsky
*@param<K>
*/
publicclassSinglyNode<KextendsObject>{
privateKdata;//數據
privateSinglyNode<?>next;//該節點的下個節點
publicSinglyNode(Kdata){
this.data=data;
}
publicSinglyNode(Kdata,SinglyNode<?>next){
this.data=data;
this.next=next;
}
publicKgetData(){
returndata;
}
publicvoidsetData(Kdata){
this.data=data;
}
publicSinglyNode<?>getNext(){
returnnext;
}
publicvoidsetNext(SinglyNode<?>next){
this.next=next;
}
@Override
publicStringtoString(){
return"SinglyNode[data="+data+"]";
}
}
B. 演算法和數據結構的關系
記得網上曾經有一個帖子,大概的列出了學習ACM來說需要的知識背景。如果不是牛人,或者天生受虐傾向,普通人看到了都會暈倒,多達100多個科目(全部需要數學背景)。樓主覺得你能學的過來嗎?
但是,所有的演算法,乃至數學在實際運用中都是要根據不同的數據來選擇不同的方法,所以一般學習過演算法和數據結構的人都會越發的認識到,數據才是程序的中心,只有找到了一個組織數據的最佳方式,演算法的運用才會事半功倍。比如我印象最深刻的是在大二時做的一道題目:判斷一個輸入的數是否符合科學計演算法。如e*103,-30.90*103就不是。 這樣一道題,如果用普通的數組線性存儲,然後逐一判斷,效率的演算法的復雜度都是不合格的。 有限狀態機則清晰明了的解決了這個問題。即把所有可能的狀態和狀態的轉換畫成一個矩陣,然後每讀取一個輸入的字元就在這些狀態中跳轉,直到最後一個字元為止,判斷最終狀態是有效還是無效狀態。
總而言之:數據結構是問題的核心,是演算法的基礎。
建議樓主先磨好數據結構這把劍,對演算法也不用著急,畢竟很多的數據結構的書中都有一些基礎演算法的介紹的。
C. 編程是什麼意思
編程是編定程序的中文簡稱,就是讓計算機代為解決某個問題,對某個計算體系規定一定的運算方式,使計算體系按照該計算方式運行,並最終得到相應結果的過程。
為了使計算機能夠理解人的意圖,就必須將需解決的問題的思路、方法和手段通過計算機能夠理解的形式告訴計算機,使得計算機能夠根據人的指令去工作,完成某種特定的任務。這種人和計算體系之間交流的過程就是編程。設計具備邏輯流動作用的一種「可控體系」。
(3)樹葉編程擴展閱讀:
計算機對除機器語言以外的源程序不能直接識別、理解和執行,都必須通過某種方式轉換為計算機能夠直接執行的。這種將高級程序設計語言編寫的源程序轉換到機器目標程序的方式有兩種:
1、解釋方式:計算機對高級語言書寫的源程序一邊解釋一邊執行,不能形成目標文件和執行文件。
2、編譯方式:經過對源程序的詞法分析、語法分析、語意分析、代碼生成和代碼優化等階段將所處理的源程序轉換為用二進制代碼表示的目標程序,然後通過連接程序處理將程序中所用的函數調用、系統功能調用等嵌入到目標程序中,構成一個可以連續執行的二進制執行文件。
參考資料來源:網路-編程
D. 我們的校園四年級作文
在平平淡淡的日常中,大家都經常接觸到作文吧,作文一定要做到主題集中,圍繞同一主題作深入闡述,切忌東拉西扯,主題渙散甚至無主題。那麼,怎麼去寫作文呢?以下是我收集整理的我們的校園四年級作文6篇,僅供參考,歡迎大家閱讀。
我們的校園四年級作文 篇1
這里承載著我美麗的夢想,這里埋藏著我心裡的秘密,這里記憶著我童年的歡樂,這里是我第二個美麗的家園!我的智慧校園。
校園是我成長的驛站,記錄著成長的痛苦,也刻下了歡樂。我愛我的校園,也愛我的班級,因為這里是我的一個家,一個充滿智慧,友善,快樂的天堂。請大家閉上眼睛,由我帶領大家一起去探索......
走進校園,我們可以看到一排整齊的小樹像威武的士兵歡迎我們來到知識的樂園;可以看見傲然挺立和明亮奪目的合歡花和月季花,它們像老師的一張張笑臉和藹可親;也可以看見神氣十足、拔地而起的小草讓校園充滿生機;還可以看見看門的伯伯種下的那些綠油油的蔬菜,嫩綠的葉子讓人心曠神怡。
走到教學樓前,映入眼簾的便是寬闊的操場了!下課後,我們像是快樂的小鳥,三五成群的來到這里,在金色的陽光下,在徐徐的微風中,跳皮筋、跳繩、踢毽子、捉迷藏……大家盡情地享受課間的快樂。操場中間還有一棵高大的梧桐樹,他看起來是那麼有精神,他是校園的守護神,常年穿著綠色的服裝,默默地為我們服務,他就像我們的朋友一樣陪伴我們在陽光下一起快樂成長。
叮鈴鈴,上課了,同學們像離弦的箭一樣奔向教室。此時,有的教室傳來郎朗的讀書聲,有的教室傳來優美的音樂和動聽的歌聲,還有的教室非常安靜,只有唰唰的寫字聲......
我們學校有一個藏有三萬多冊圖書的圖書館,學校全天為我們開放,我們拿著自己的學籍卡就能自由借還裡面的圖書,盡情暢游知識的海洋!每個班級給我們配備了班班通,老師們總是用豐富有趣的課件給我們上課!那些難懂的知識都被變成了有趣的視頻、歌曲、圖形等。學起來容易多了!我們還有豐富多彩的社團課,我參加的是計算機社團,我們的計算機教室可大了,有60多台電腦,計算機老師這學期教我們打字、電腦繪畫、編程小游戲!現在我也是一個電腦小能手了!有一次還幫媽媽編了一個計時器,媽媽一直誇我是個小天才!我們學校其他社團也很有意思,例如,泥團社團、烙畫社團、啦啦操社團等,下學期我體驗後再給大家講吧!
我很榮幸成為本校的一名小學生,享受著學校智慧化的教學、科研、管理、生活和服務。有種講起來就停不下來的節奏,好了,今天就講這么多吧!這就是我的智慧校園,一個充滿著驕傲與自豪的天堂。它,如雨傘,遮風擋雨;如鮮花,色彩斑斕;如大海,寬廣博大。所以,我愛他,我的智慧校園!
我們的校園四年級作文 篇2
我的學校叫伊河路小學,位於中原區伊河路上,我想大概就是因為她在伊河路上的緣故,所以才這樣給她命名的。
每天上學時,首先映入眼簾的就是五個鮮紅的大字-----伊河路小學。學校的大門是個自動門,每當我們去上學的時候,她就像媽媽一樣展開懷抱迎接我們,讓我們在知識的海洋里自由徜徉。傳達室的保安叔叔們為了我們的安全,不管風吹日曬,總是面帶笑容,盡心盡責地為我們站崗,保護我們進出校園的安全。
走進校園,第一眼看到的就是一塊巨大的液晶屏幕,屏幕每天都在滾動播放著不同的信息,有日常安全教育、有學習方法介紹、有一些活動的時間安排等。再往裡走就看到了升旗台,到了周一,就會有高年級的哥哥姐姐喊著「1、2、1」,邁著整齊的腳步,到升旗台上進行升國旗儀式。每次看到這里,我都非常激動,想像著什麼時候自己也能站在升旗台上聽著庄嚴的國歌升國旗。
走進教室,辛勤的老師正在調試「班班通」整理課件,課件內容有音頻、視頻、還有動畫和圖片,有了這些智慧因素的存在,使得我們上課內容更加生動、有趣,同學們的學習情緒也更加高漲。除了學習日常的文化知識,我們還增加了許多有意思的課程,比如新增加的電腦課,我們在老師的幫助下,學會了什麼是「最大化」和「最小化」,怎麼切換中英文,通過「編程貓」學會了簡單的編程,自己動手做了許多簡單的動畫和小游戲。另外我們每周還有一節校本課,一定會有人問「校本課」是學什麼的呢?我給大家解釋一下,「校本課」是由多門課程所組成,包含了廚藝課、陶藝課、科學探索、國學知識等好多內容組成,同學們可以根據自己的喜好進行網上報名選課,我今年選擇了「金話筒」,通過這門課程想讓自己體驗一下當主持人的感覺。
從去年開始,我們學校開展了校園足球聯賽,我們利用中午上課前的時間進行比賽,每班挑選幾名男女同學組成本班的足球隊,我很高興成為其中一員。經過大家一個學期的努力,我們班取得了不錯的成績。足球聯賽不僅增強了同學們的體質還增強了我們班的凝聚力。
這就是我的智慧校園,我在智慧的校園里學習豐富多彩的知識,努力讓自己成為一名德、智、體、美、勞全面發展的少先隊員。
我們的校園四年級作文 篇3
我們的校園是一個美麗且豐富多彩的一個大校園。
我們學校坐落於繁華的濱江,走在濱和路上,你便能遠遠地望見一塊巨石橫卧於學校門口,上面清楚的寫著「杭州江南實驗學校」。待你走近時,一座獨特的學校大門矗立在你的面前。兩個碧色池子分布在大門兩側,中間小河連通,兩座木質拱橋橫跨在小河之上,遠遠望去猶如「雙虹卧波」,六根粗大的柱子立在大門外側,像哨兵似的駐守著。
聽著潺潺水聲,慢慢走過木橋,便進入了我的校園,校園內那真是「五步一景,十步一典故」。
在你的右手邊就是我們學校最大美景之一「群賢啟夢」,好多名人的雕像矗立在綠地之上,他們有偉大的革命家孫中山先生、現代文學家魯迅爺爺和冰心奶奶、助人為樂的雷鋒叔叔和舍己為人的賴寧,他們神態各異,栩栩如生般或站著或坐著,好似一直在激勵我們為了夢想而不斷努力前行。
漫步來到學校的操場上,抬頭便能看到那一座大鍾,大概10層樓那麼高,猶如巨大的火箭一般,十分引人注目。那時針、分針每一刻的走動,都在提醒著我們珍惜我們寶貴的時間。
大鍾樓的右手邊,有一塊鬱郁蔥蔥的山坡,一張白色風帆張立著,遠遠望去猶如一張巨帆在碧波中起航,同學們在這艘大船中,迎著風浪,無畏前行。這里便是我們學校又一大風景地之一—「揚帆起航」。
我們校園中這樣的景色還有很多,我們的學習生活也因此而豐富多彩。我愛我的校園。
我們的校園四年級作文 篇4
「渦陽二小」的全稱就是渦陽縣城關鎮第二小學,而我就在那裡上學,那裡環境秀美。
春天,學校的梧桐樹都在努力地發芽,而那高大的松樹更是在春天的校園里顯得生機勃勃了。同學們下課的時候,都會在松樹下面玩游戲,玩累了,會在松樹下面乘涼。幾只鳥兒躲在松樹樹葉叢間,嘰嘰喳喳地叫個不停,好像在和同學玩躲貓貓呢!在松樹旁有一叢冬青樹叢,一陣春風吹過來,樹叢的樹葉就「沙沙」地響。
夏天,梧桐樹葉們都長大了,像手掌。松樹在夏天的校園中,就是一個遮陽的神器,同學們和教師們都會在下面乘涼。
秋天,校園里的樹葉都黃了,只有松樹的樹葉沒有黃,依然站在那兒。一陣風吹來,把黃葉吹落下來,黃葉好像在跳舞,一會兒往那邊轉,一會往那邊轉,然後再完美降落。又來了一陣風,又把剛降落的黃葉吹了起來,在半空中全體旋轉了起來。有的同學把落下的樹葉做成標本。
冬天,大雪下個不停,把所有的教學樓的屋頂都給戴上一頂「禿頂帽」,還下起大霧,要是你在操場散步,都會覺得走進了仙境一般。
我愛我的校園——城關二小!
我們的校園四年級作文 篇5
我從小就是個十足的.書迷。但是在我看過的眾多如雲的書中,最讓我手不釋卷的卻是《小童話大智慧》這本童話書。這本書是我今年在託管書架上找到的。這本書原是這里一個學生的,因託管老師見這本書內容精彩、引人入勝、詞句優美,而且內容也是一些教我們如何做人的道理,於是就把這本書選在了書架上,讓大家欣賞,我也看了這本書,的確不假。我剛看到這本書的時候,就被它的封面深深的吸引住了,那淺綠色的封面,那富有藝術魅力的字體,那栩栩如生的畫面……
掀開第一頁,就可以看到作者寫的前言,品讀一下前言,就覺得這本書與眾不同、非同凡響。再掀開第二頁,你就可以把這本書里的故事看個透,那一個個故事名取的真是別具一格,讓你看了就想一飽眼福。
這里的每一個故事都被作者用生動的語句寫的與眾不同、引人入勝。那一個個優美的詞句,讓我感覺受益匪淺,好想這些事就出現在自己身邊一樣……
就因為這本書,讓我知道了許許多多做人的道理,讓我知道了人生的可貴……
它可是我看過的最精彩的一本書,讓我們一起來分享吧!
我們的校園四年級作文 篇6
我在新惠第二小學上學,我的學校在新中街南端。我有一個美麗的校園。
進了學校的大門,往右走,映入眼簾的是教學樓。教學樓是藍白相間的,有五層呢!教學樓有三個門,兩個小門,中間一個大門。有十二根大圓柱,要三個人拉手才能圍起一個。教學樓的正中掛著校徽,校徽兩邊分別寫著四個大字:「團結友愛」、「活潑向上」
從教學樓中門走出來,正中央是升旗台,升旗台上聳立著旗桿,旗桿上隨風飄揚著五星紅旗。五星紅旗兩邊是三角形的草坪,那裡花開得繁茂,五彩繽紛;草長得茂盛,翠綠迷人;周邊還栽著大松樹,飽經風霜日曬,長得蒼翠欲滴,像一個個粗壯的巨人,守衛著我們美麗的校園。
從升旗台一直往前走,就是操場。操場很寬大,操場前面迎面的是藝術牆,那兒畫著各式小朋友的運動圖案,有打乒乓球的,有打羽毛球的,有打網球的,有跳繩的,有跳皮筋的……
藝術牆左邊是乒乓球台,乒乓球台左邊是一些運動器材,再往左走,一幅美麗的風景畫展現在眼前,這不是真的風景,可是有哪一個地方的風景能比得上這幅畫里的美景呢?
我的校園美,我愛我的校園!