最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++關(guān)于樹(shù)的定義全面梳理

 更新時(shí)間:2022年06月25日 08:47:46   作者:肩上風(fēng)騁  
樹(shù)是一種重要的非線性數(shù)據(jù)結(jié)構(gòu),直觀地看,它是數(shù)據(jù)元素(在樹(shù)中稱(chēng)為結(jié)點(diǎn))按分支關(guān)系組織起來(lái)的結(jié)構(gòu),很象自然界中的樹(shù)那樣。樹(shù)結(jié)構(gòu)在客觀世界中廣泛存在,如人類(lèi)社會(huì)的族譜和各種社會(huì)組織機(jī)構(gòu)都可用樹(shù)形象表示,本篇介紹二叉樹(shù)的遞歸與非遞歸遍歷的方法

概念

本文以一個(gè)簡(jiǎn)單的樹(shù)為例,如下圖,來(lái)記錄樹(shù)的一些概念。

樹(shù)

一種由n個(gè)節(jié)點(diǎn)組成的具有一定層次關(guān)系的有限數(shù)據(jù)集合。每個(gè)節(jié)點(diǎn)有0個(gè)或者n個(gè)子節(jié)點(diǎn),有一個(gè)根節(jié)點(diǎn)(沒(méi)有前驅(qū)只有后繼),除根節(jié)點(diǎn)外每一個(gè)節(jié)點(diǎn)都有一個(gè)前驅(qū),0個(gè)或多個(gè)后繼。

樹(shù)的葉子節(jié)點(diǎn)

只有一個(gè)前驅(qū),沒(méi)有后繼的節(jié)點(diǎn),為最外層的節(jié)點(diǎn)。葉子節(jié)點(diǎn)的度為0。

節(jié)點(diǎn)的度

節(jié)點(diǎn)擁有的子樹(shù)的數(shù)目。

分支結(jié)點(diǎn)

度不為0的結(jié)點(diǎn)。

樹(shù)的度

樹(shù)中結(jié)點(diǎn)的最大的度。

樹(shù)的高度

任意葉子節(jié)點(diǎn)距離根節(jié)點(diǎn)的最大深度。此文中樹(shù)的葉子節(jié)點(diǎn)為D、E、H,距離根節(jié)點(diǎn)的深度都為4,故高度為4。

樹(shù)的深度

即從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)的行數(shù)。此文中樹(shù)的深度為4。

二叉樹(shù)

二叉樹(shù)是每個(gè)節(jié)點(diǎn)最多有兩個(gè)子樹(shù)的樹(shù)結(jié)構(gòu)。

它有五種基本形態(tài):

二叉樹(shù)可以是空集;

根可以有空的左子樹(shù)或右子樹(shù);

或者左、右子樹(shù)皆為空。

二叉樹(shù)的特點(diǎn)

二叉樹(shù)第i層上的結(jié)點(diǎn)數(shù)目最多為2i-1(i>=1)

深度為k的二叉樹(shù)至多有2k-1個(gè)結(jié)點(diǎn)(k>=1)

包含n個(gè)結(jié)點(diǎn)的二叉樹(shù)的高度至少為(log2n)+1

滿二叉樹(shù)

高度為h,并且由2h-1個(gè)節(jié)點(diǎn)組成的二叉樹(shù)。

完全二叉樹(shù)

一棵二叉樹(shù)中,只有最下面兩層節(jié)點(diǎn)的度可以小于2,并且最下層的葉節(jié)點(diǎn)集中在靠左的若干位置上,這樣的二叉樹(shù)稱(chēng)為完全二叉樹(shù)。

二叉查找樹(shù)

二叉查找樹(shù)又被稱(chēng)為二叉搜索樹(shù)。設(shè)x為二叉查找樹(shù)中的一個(gè)結(jié)點(diǎn),x結(jié)點(diǎn)包含關(guān)鍵字key,結(jié)點(diǎn)x的key值計(jì)為key[x]。如果y是x的左子樹(shù)中的一個(gè)結(jié)點(diǎn),則key[y]<=key[x];如果y是x的右子樹(shù)的一個(gè)結(jié)點(diǎn),則key[y]>=key[x]。

特點(diǎn):

1.若任意結(jié)點(diǎn)的左子樹(shù)不空,則左子樹(shù)上所有結(jié)點(diǎn)的值均小于它的根結(jié)點(diǎn)的值。

2.任意結(jié)點(diǎn)的右子樹(shù)不空,則右子樹(shù)上所有結(jié)點(diǎn)的值均大于它的根結(jié)點(diǎn)的值。

3.任意結(jié)點(diǎn)的左、右子樹(shù)也分別為二叉查找樹(shù)。

4.沒(méi)有鍵值相等的結(jié)點(diǎn)。

示例

下面直接上代碼,一個(gè)簡(jiǎn)單的樹(shù)的創(chuàng)建、遍歷輸出,葉子節(jié)點(diǎn)數(shù),高度。

代碼實(shí)現(xiàn)

Tree.h

#pragma once
typedef struct MYTREE {
	char data;
	struct MYTREE* lChild;
	struct MYTREE* rChild;
}MyTree;
class Tree
{
public:
	Tree();
	~Tree();
	void CreateTree();
	void TraverseTree(MyTree *root);
	void GetLeafNode(MyTree *root,int &num);
	int GetTreeDepth(MyTree *root);
	void GetTreeNode(MyTree *root, int &num);
};

Tree.cpp

#include "Tree.h"
#include <iostream>
#include<algorithm>//max,min
using namespace std;
Tree::Tree()
{
}
Tree::~Tree()
{
}
void Tree::CreateTree()
{
	MyTree t1 = {'A',nullptr,nullptr};
	MyTree t2 = { 'B',nullptr,nullptr };
	MyTree t3 = { 'C',nullptr,nullptr };
	MyTree t4 = { 'D',nullptr,nullptr };
	MyTree t5 = { 'E',nullptr,nullptr };
	MyTree t6 = { 'F',nullptr,nullptr };
	MyTree t7 = { 'G',nullptr,nullptr };
	MyTree t8 = { 'H',nullptr,nullptr };
	t1.lChild = &t2;
	t1.rChild = &t6;
	t2.rChild = &t3;
	t3.lChild = &t4;
	t3.rChild = &t5;
	t6.rChild = &t7;
	t7.lChild = &t8;
	TraverseTree(&t1);
	cout << endl;
	int leafNum = 0;
	GetLeafNode(&t1,leafNum);
	cout << "leaf num: " << leafNum << endl;
	int treeDepth = GetTreeDepth(&t1);
	cout << "depth:" << treeDepth << endl;
	int nodeNum = 0;
	GetTreeNode(&t1,nodeNum);
	cout << "node num; " << nodeNum << endl;
}
void Tree::TraverseTree(MyTree *root)
{
	if (root == nullptr)
	{
		return;
	}
	TraverseTree(root->lChild);
	cout << root->data;
	TraverseTree(root->rChild);
}
void Tree::GetLeafNode(MyTree *root,int &num)
{
	if (root == nullptr)
	{
		return ;
	}
	if (root->lChild == nullptr && root->rChild == nullptr)
	{
		num++;
	}
	GetLeafNode(root->lChild,num);
	GetLeafNode(root->rChild,num);
}
int Tree::GetTreeDepth(MyTree * root)
{
	int num = 0;
	if (root == nullptr)
	{
		return num;
	}
	int lNum = GetTreeDepth(root->lChild);
	int rNum = GetTreeDepth(root->rChild);
	return max(lNum,rNum)+1;
}
void Tree::GetTreeNode(MyTree * root, int & num)
{
	if (root == nullptr)
	{
		return;
	}
	++num;
	GetTreeNode(root->lChild,num);
	GetTreeNode(root->rChild,num);
}

main.cpp

#include <iostream>
#include "Tree.h"
using namespace std;
void test() {
	Tree t;
	t.CreateTree();
}
int main()
{
	test();
	return 0;
}

開(kāi)發(fā)環(huán)境

vs2017控制臺(tái)輸出程序。

運(yùn)行結(jié)果

到此這篇關(guān)于C++關(guān)于樹(shù)的定義全面梳理的文章就介紹到這了,更多相關(guān)C++樹(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(161.一個(gè)編輯距離)

    C++實(shí)現(xiàn)LeetCode(161.一個(gè)編輯距離)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(161.一個(gè)編輯距離),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++ Primer中&、*符號(hào)的多重定義與int *p和int* p的區(qū)別講解

    C++ Primer中&、*符號(hào)的多重定義與int *p和int* p的區(qū)別講解

    今天小編就為大家分享一篇關(guān)于C++Primer中&、*符號(hào)的多重定義與int *p和int* p的區(qū)別講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • C++獲取硬件參數(shù)的示例詳解

    C++獲取硬件參數(shù)的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用C++獲取硬件參數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • QT實(shí)現(xiàn)提示右下角冒泡效果

    QT實(shí)現(xiàn)提示右下角冒泡效果

    這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)提示右下角冒泡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C語(yǔ)言推箱子游戲?qū)崿F(xiàn)代碼

    C語(yǔ)言推箱子游戲?qū)崿F(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言推箱子游戲?qū)崿F(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C++關(guān)于引用作為函數(shù)的用法

    C++關(guān)于引用作為函數(shù)的用法

    今天小編就為大家分享一篇關(guān)于C++關(guān)于引用作為函數(shù)的用法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C++ 詳細(xì)講解對(duì)象的構(gòu)造順序

    C++ 詳細(xì)講解對(duì)象的構(gòu)造順序

    對(duì)象的構(gòu)造往往和構(gòu)造函數(shù)會(huì)牽扯在一起,構(gòu)造函數(shù)的函數(shù)可能會(huì)由非常復(fù)雜的邏輯所組成,不同類(lèi)的構(gòu)造函數(shù)的程序邏輯很可能是相互依賴的,當(dāng)這種相互依賴一旦成立,那么對(duì)象的構(gòu)造順序很可能導(dǎo)致難以調(diào)試的Bug出現(xiàn)
    2022-04-04
  • Qt實(shí)現(xiàn)抽獎(jiǎng)小游戲的三種方式

    Qt實(shí)現(xiàn)抽獎(jiǎng)小游戲的三種方式

    本文主要介紹了Qt實(shí)現(xiàn)抽獎(jiǎng)小游戲的三種方式,主要包括while循環(huán),定時(shí)器,線程這三種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • 詳談c++11 final與override說(shuō)明符

    詳談c++11 final與override說(shuō)明符

    下面小編就為大家?guī)?lái)一篇詳談c++11 final與override說(shuō)明符。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 深入淺析 C++ 調(diào)用 Python 模塊

    深入淺析 C++ 調(diào)用 Python 模塊

    Python 提供了 C++ 庫(kù),使得開(kāi)發(fā)者能很方便地從 C++ 程序中調(diào)用 Python 模塊。接下來(lái)通過(guò)本文給大家介紹 C++ 調(diào)用 Python 模塊的相關(guān)知識(shí),需要的朋友參考下吧
    2016-03-03

最新評(píng)論

大庆市| 磴口县| 英德市| 大宁县| 喀喇沁旗| 汤原县| 保定市| 江华| 嘉义市| 甘泉县| 高雄市| 六枝特区| 深圳市| 介休市| 北海市| 广安市| 云阳县| 乌拉特前旗| 泗洪县| 牟定县| 上高县| 乐昌市| 天水市| 琼结县| 诸暨市| 桃江县| 贵定县| 汉中市| 昌吉市| 图木舒克市| 太康县| 内黄县| 平和县| 宜城市| 南通市| 开封市| 鄄城县| 武强县| 闻喜县| 彭州市| 六安市|