資料結構與演算法 二叉樹,前序,後續,中序遍歷

2021-10-13 05:58:51 字數 1787 閱讀 4301

樹的幾個重要元素

1,節點:樹裡面的元素

2,父子關係:節點之間相連的關係

3,子樹:當節點大於1是,其餘不相交的節點的集合稱作子樹

4,度:乙個節點擁有子樹的數量稱作度

5,孩子:節點的子節點

6,雙親節點

7,兄弟節點

9,森林:由n個不相交的樹組成

節點的高度:節點到葉子節點的最長路徑

節點的深度:根節點到該節點的邊個數

節點的層數:節點的深度+1

樹的高度:根節點的高度

二叉樹1,每個節點最多有兩個節點

2,第n層最多有2^(n-1)個節點

滿二叉樹:除葉子結點外,每個結點都有左右兩個子結點。

完全二叉樹:除最後一層外,其他的結點個數必須達到最大,並且最後一層結點都連續靠左排列。

執行結果如下:

堆就是乙個完全二叉樹,主要原因是想借用陣列,陣列開闢的是連續的空間,可以使用cpu的快取行

package edu.tree;

/** * @author: lht

* @date: 2020/12/28 17:53

*/public

class

binarytree

if(root.

getright()

!= null)

}/**

* 中序遍歷

* 左中右

** @param root

*/public

void

in(mytreenode root)

print

(root);if

(root.

getright()

!= null)

}/**

* 後續遍歷

* 左右中

* o(n)

** @param root

*/public

void

post

(mytreenode root)

if(root.

getright()

!= null)

print

(root);}

public

void

print

(mytreenode node)

public

static

void

main

(string[

] args)

}/**

* 二叉樹定義

*/class

mytreenode

public

char

getdata()

public

void

setdata

(char data)

public mytreenode getleft()

public

void

setleft

(mytreenode left)

public mytreenode getright()

public

void

setright

(mytreenode right)

}

資料結構 二叉樹前序遍歷(非遞迴)

前序遍歷的順序 根 左 右 非遞迴的二叉樹前序遍歷大的思想分為 訪問它的左路節點 訪問左路節點的右子樹 具體非遞迴的實現思路如下 拿到根節點,然後將其入棧,再看它的左子樹是否為空 若左子樹不為空,則把此時左子樹作為當前節點,重複操作 當左子樹為空時,讓棧頂節點出棧,但不輸出,並去訪問出棧節點的右子樹...

二叉樹前序遍歷 中序遍歷 後續遍歷 演算法實現

掌握以下概念是必要的 前序遍歷 1.訪問根節點 2.前序遍歷左子樹 3.前序遍歷右子樹 中序遍歷 1.中序遍歷左子樹 2.訪問根節點 3.中序遍歷右子樹 後序遍歷 1.後序遍歷左子樹 2.後序遍歷右子樹 3.訪問根節點 class binarytree b1 new binarytree 4 b2 ...

二叉樹前序遍歷

樹的前序遍歷 根左右 可以設計乙個棧來實現 首先讓根root入棧,然後root出棧,pop掉棧頂的元素,列印root,然後把root的右孩子入棧,左孩子入棧,讓棧頂的元素變成新的root,pop掉棧頂的元素,列印root,然後把root的右孩子入棧,左孩子入棧,重複此步驟 include inclu...