目錄
1、求二叉樹的遍歷順序為自下至上,自右至左的層序遍歷序列
2、判斷二叉樹是否為完全二叉樹
3、統計二叉樹中雙分支結點的個數
4、求先序遍歷序列中第k個結點的值
5、求二叉樹的高度
6、判斷二叉樹是否為二叉排序樹
7、求出二叉排序樹中結點所在的層數
演算法思想:使用層序遍歷。二叉樹正常的層序遍歷順序是自上至下,自左向右的順序,與題目要求剛好相反,使用乙個棧,將正常的層序遍歷序列取逆即可。
void levelorder(bitree bt)
//while
while(!isempty(s))
//while
}//void
演算法思想:使用層序遍歷。將結點全部入隊,空結點也需要入隊。當遇到空結點時,就檢視隊中剩餘結點是否有非空結點,若有,則該二叉樹不是完全二叉樹,若無,則是完全二叉樹。
bool levelorder(bitree bt)
else
}//else
}//while
return true;
}//void
遞迴
演算法思想:
int dsonnodes(bitree bt)
非遞迴
演算法思想:使用層序遍歷。設定乙個變數,用來記錄雙分支結點的個數。判斷雙分支節點就是判斷左右子樹是否為空,當遇到乙個雙分支結點時,使該變數加一,遍歷結束時返回該變數即可。
int dsonnodes(bitree bt)
//while
return count;
}//void
遞迴
演算法思想:先序遞迴遍歷,設定乙個全域性變數,記錄當前結點的序號,當訪問到第k個結點時,返回該結點的值。。
int i = 1;
elemtype prenode(bitree bt, int k)
非遞迴
演算法思想:使用先序遍歷。設定乙個變數,用來記錄當前訪問的結點序號,當訪問到第k個結點時,返回該結點的值。
elemtype preorder2(bitree bt, int k)
//while
return " ";//k大於二叉樹中結點個數時,返回" ";
}//void
遞迴
演算法思想:如果樹為空,則返回0。否則,遞迴計算左子樹右子樹的高度,然後比較左右子樹的高度,返回高度較大值加一。
int btdepth(bitree bt)
非遞迴
演算法思想:使用層序遍歷。設定變數level用來記錄當前結點所在的層數,設定變數last用來記錄當前層最右結點,每次層序遍歷出隊時與last指標比較,若相等,則層數加一,並讓last指向下一層的最右節點。直到遍歷結束,返回變數level。
int btdepth2(bitree bt)
}//while
return level;
}//void
演算法思想:對二叉樹進行中序遍歷,若能始終保持前乙個數比後乙個數小,則說明是二叉排序樹。
遞迴
keytype predt = -32767;
int judgebst(bitree bt)
//else
}//int
非遞迴
bool judgebst(bitree bt)
else
}//while
dequeue(q,temp);
while(!isempty(q))
else
return false;
}//while
return true;
}//bool
演算法思想:與二叉排序樹的查詢很像,只是需要加乙個變數記錄當前結點的層數。
int level(bitree bt, bstnode *p)
return n;
}
LeetCode 二叉樹相關題目
class solution private 遞迴的方法 void inorder treenode root,vector int nodes inorder root left,nodes nodes.push back root val inorder root right,nodes 非遞迴...
6 二叉樹相關題目
目錄 nc5 二叉樹根節點到葉子節點和為指定值的路徑 思路 先序遍歷的思想 根左右 數字求和 每一層都比上層和 10 當前根節點的值 nc6 二叉樹的最大路徑和 思路1 遞迴樹的節點 思路2 層序遍歷 nc8 二叉樹根節點到葉子節點和為指定值的路徑 思路 樹的深度優先遍歷dfs nc9 二叉樹中是否...
二叉樹的相關的各種題目
二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 一棵深度為k,且有 2 k 1個結點的二叉樹,稱為滿二叉樹。最少結點為k,為斜二叉樹。了解了什麼是二叉樹後,自然要懂得它的三種遍歷方法。前序 先序 中 左 右 中序 左 中 右 後序 左 右 中。中...