原创 C++判斷一棵樹是否爲AVL(二叉平衡樹)

1. 題目要求 判斷一棵二叉樹是否是平衡二叉樹 2. 思路 AVL樹的名字來源於它的發明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL樹是最先發明的自平衡二叉查找樹(Self-Balancin

原创 C++判斷一棵樹是否爲完全二叉樹(CBT)

1. 定義 如果一棵深度爲k,有n個結點的二叉樹中各結點能夠與深度爲k的順序編號的滿二叉樹從1到n標號的結點相對應的二叉樹稱爲完全二叉樹。(只有最下兩層結點可以度小於2)。 需要滿足以下二個特徵: 葉子結點只可能在層次最大

原创 C++判斷一棵樹是否爲BST(二叉排序樹、搜索樹)

1. 題目 給定一棵二叉樹,判定該二叉樹是否是二叉搜索樹(Binary Search Tree)? 2. 思路 二叉搜索樹要求: 結點node的左子樹所有結點的值都小於node的值。 結點node的右子樹所有結點的值都大於nod

原创 C++ 已知一棵完全二叉樹,求其節點的個數

1. 題目 要求:時間複雜度低於O(N),N爲這棵樹的節點個數 2. 思路 思路:因爲滿樹的節點數2h−12^{h} - 12h−1 如果一個節點的右子樹的最左節點到達完全二叉樹的最後一層,則左子樹爲滿樹,節點個數等於左子樹的

原创 C++實現二叉樹深度優先搜索(DFS)、廣度優先搜索(BFS)

在前面的文章中我們實現了二叉樹的深度優先搜索,先序遍歷,中序遍歷,後序遍歷,分別實現了遞歸和非遞歸版本。這裏我們着重介紹一下廣度優先搜索(BFS) 1. 基本概念 如圖所示,BFS爲是從根節點開始,沿着樹的寬度遍歷樹的節點。

原创 C++實現在二叉樹中找到一個節點的後繼節點

在二叉樹中找到一個節點的後繼節點 1. 題目描述 給定一顆二叉樹和其中的一個節點,如果找出中序遍歷的下一個節點?樹中的節點除了有兩個分別指向左、右子節點的指針,還有一個指向父節點的指針。 已知該二叉樹如圖所示: 2. 思

原创 C++實現二叉樹的先序、中序、後序遍歷,包括遞歸方式和非遞歸 方式

C++實現二叉樹的先序、中序、後序遍歷,包括遞歸方式和非遞歸方式。 1. 二叉樹的基本結構 struct Node { int value; Node* left; Node* right; N

原创 C++實現二叉樹的序列化和反序列化

1. 題目要求 二叉樹的序列化和反序列化 2. 思路 2.1 序列化 首先我們介紹二叉樹先序序列化的方式,假設序列化的結果字符串爲str,初始時str等於空字符串。先序遍歷二叉樹,如果遇到空節點,就在str的末尾加上“#!”

原创 C++實現從頭到尾打印鏈表

1. 題目描述 輸入一個鏈表,按鏈表值從尾到頭的順序返回一個ArrayList。 2. 解題思路 這裏僅僅需要打印數值,而不是反轉鏈表,這個還是有區別.如果單純的反轉打印鏈表的值的話,我們可以使用stack操作. 3. 部

原创 C++實現轉圈打印矩陣

給定一個整型矩陣 matrix,請按照轉圈的方式打印它。 1. 題目描述 例如:    1  2  3  4    5  6  7  8    9   10   11  12    13  14  15  16 打印結果爲:1

原创 C++打印之字形矩陣

打印之字形矩陣 1. 題目描述 給定一個矩陣matrix,按照“之”字形的方式打印這個矩陣,例如: 1 2 3 4 5 6 7 8 9 10 11 12“之”字形打印的結果爲:1,2,5,9,6,3,4,7,10,11,8,

原创 C++在行列都排好序的矩陣中找數

1. 題目描述 給定一個有N*M的整型矩陣matrix和一個整數K,matrix的每一行和每一 列都是排好序的。實現一個函數,判斷K是否在matrix中。 例如: 0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9

原创 C++利用兩個棧實現隊列的方法

這篇文章主要給大家介紹了關於C++利用兩個棧實現隊列的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧 1. 基礎 隊列:先進先出,即插入

原创 C++用兩個隊列實現棧

1. 基礎 隊列:先進先出,即插入數據在隊尾進行,刪除數據在隊頭進行; 棧:後進先出,即插入與刪除數據均在棧頂進行。 2. 思路 兩個隊列實現一個棧的思想:用dataQueue隊列作爲push數據的隊列,用helpQue

原创 C++用兩個棧實現隊列

1. 基礎 隊列:先進先出,即插入數據在隊尾進行,刪除數據在隊頭進行; 棧:後進先出,即插入與刪除數據均在棧頂進行。 2. 思路 兩個棧實現一個隊列的思想:用pushStack棧作爲push數據的棧,用popStack棧