樹的幾個重要元素
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...