初識二叉樹

2021-10-02 14:58:43 字數 1148 閱讀 8494

今天繼續在leetcode上做題,遇到了對稱二叉樹這道題。二叉樹是我從來沒學過的一種資料結構,今天藉此機會也初步認識了一下二叉樹。

這種資料結構大概就長這樣。跟鍊錶類似,樹也有節點這個概念,而且定義節點的方法也跟鍊錶類似。既然叫做樹,就會有根和枝,在資料結構這裡枝叫做邊。由下圖可見樹有分支結構,圖中的數字就為樹的節點,節點分支下來的節點就為子節點,有子節點就會有父節點。二叉樹是一種特殊的樹,他的每個結點下最多只有兩個子節點,乙個左節點乙個右節點。

1

/ \

2 2

/ \ / \

3 4 4 3

先從節點建立講起

typedef struct treenode

treenode;

可以看到其實跟鍊錶節點的定義有些相似,同樣是有資料域和指標域。兩個指標分別指向這個節點下的左節點和右節點。

這裡的**用了引用的**。感謝這位博主的部落格,從裡面學習了很多。

void creattree(treenode **t)

q = (treenode *)malloc(sizeof(treenode));

if (q == null)

q->val = s;

*t = q;

//遞迴建立

creattree(&q->left);;

creattree(&q->right);

}//先序遍歷二叉樹

void preorder(treenode *t)

}int main() {

treenode *t=null;

creattree(&t);

cout << "the tree is :" << endl;

preorder(t);

cout << endl;

cout《這個二叉樹,執行**時我們就輸入*123##4##64##5##*前面的123全是來建立最左邊的子節點。然後兩個##說明3後不再建立左右節點,退到2,因為2還差乙個右節點,輸入4建立,再次輸入兩個#表示4後不再建立任何節點,然後退到1,因為1也差乙個右節點,輸入6建立,接下來先建立6的左節點4然後是右節點5。

今天剛剛認識這種資料結構,學的也非常淺,上面是我對一些知識點的理解。等我以後對樹更深入學習後再來更新。

二叉樹 二叉樹

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

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...

二叉樹,完全二叉樹,滿二叉樹

二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...