二叉樹詳解

2021-09-02 10:16:26 字數 2657 閱讀 4673

樹是一種比較重要的資料結構,尤其是二叉樹。二叉樹是一種特殊的樹,在二叉樹中每個節點最多有兩個子節點,一般稱為左子節點和右子節點(或左孩子和右孩子),並且二叉樹的子樹有左右之分,其次序不能任意顛倒。本篇部落格將詳細為大家解析二叉樹。

首先介紹兩個概念:

滿二叉樹:在一棵二叉樹中,如果所有分支結點都有左孩子和右孩子結點,並且葉子結點都集中在二叉樹的最下層,這樣的樹叫做滿二叉樹

如:

完全二叉樹:若二叉樹中最多只有最下面兩層的結點的度數可以小於2,並且最下面一層的葉子結點都是依次排列在該層最左邊的位置上,則稱為完全二叉樹

如:

區別:滿二叉樹是完全二叉樹的特例,因為滿二叉樹已經滿了,而完全並不代表滿。所以形態你也應該想象出來了吧,滿指的是出了葉子節點外每個節點都有兩個孩子,而完全的含義則是最後一層沒有滿,並沒有滿。

二叉樹的鏈式儲存結構是一類重要的資料結構,定義結果為:

//定義樹的結構

struct node

};

二叉樹的建立首先我們使用者輸入生成一棵二叉樹,要生的的二叉樹如下圖所示:

#代表空結點。

下面我們根據上面圖中所示的二叉樹,利用先序依次輸入abdg###e#h##c#f##(即先序遍歷)

生成二叉樹的**如下:

//二叉樹生成--先序遍歷輸入要生成的二叉樹資料,#代表空結點

void createtree(node * & root)

}

二叉樹節點查詢採用遞迴的方法在二叉樹root裡查詢只為aim的結點,若找到此節點則返回其指標,否則返回null

查詢**如下:

//檢查二叉樹是否包含資料aim,有則返回其指標

node * findnode(node * & root,string aim)

}

這裡解釋一下遞迴中的return的意思:

return 對當前函式來說是結束了,對呼叫它的父函式來說你這個函式執行完成了,父函式就會接著執行下一語句。

沒想到父函式馬上又遇到乙個return,父函式結束了,對爺爺函式來說父函式執行完成了,爺爺函式就接著執行下乙個語句

二叉樹遍歷

1.先序遍歷

先序遍歷過程是:

1)訪問根結點

2)先序遍歷左子樹

3)先序遍歷右子樹

先序遍歷**為:

void  preorder(node * root)//先序遍歷

}

2.中序遍歷中序遍歷過程是:

1)中序遍歷左子樹

2)訪問根結點

3)中序遍歷右子樹

中序遍歷的**:

void  inorder(node * root)//中序遍歷

}

3.後續遍歷後序遍歷過程是:

1)後序遍歷左子樹

2)後序遍歷右子樹

3)訪問根結點

後序遍歷**為:

void  postorder(node * root)//後序遍歷

}

二叉樹高度計算遞迴解法:

(1)如果二叉樹為空,二叉樹的深度為0

(2)如果二叉樹不為空,二叉樹的深度 = max(左子樹深度, 右子樹深度) + 1

**如下:

int nodeheight(node * root)//計算二叉樹高度

}

輸出二叉樹葉子節點

void showleaf(node * root)

}

執行結果為:

遞迴分析

上面源**中,大量運用了遞迴演算法,

下面我們來分析其中乙個遞迴的過程。

二叉樹結構為:

利用先序遍歷,即**為:

void  preorder(node * root)//先序遍歷

}

畫出其執行狀態圖:

二叉樹詳解

一 簡介 世界上的樹有千萬種,我們這裡來學習我們資料結構中的樹,它是我們現實生活中倒置的樹。之前,我們學習的順序表,鍊錶,棧 和佇列。可以說都是我們的線性結構,也就是我們所謂的一對一的結構,可是現實生活中,我們經常碰到是我們一對多的情況。今天,我們就來研究一下這種一對多的資料結構體 樹 那麼,什麼叫...

二叉樹詳解

一 二叉樹的一些概念 二叉樹就是每個結點最多有兩個子樹的樹形儲存結構。先上圖,方便後面分析。1 滿二叉樹和完全二叉樹 上圖就是典型的二叉樹,其中左邊的圖還叫做滿二叉樹,右邊是完全二叉樹。然後我們可以得出結論,滿二叉樹一定是完全二叉樹,但是反過來就不一定。滿二叉樹的定義是除了葉子結點,其它結點左右孩子...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...