題目:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都不相同。
思路:陣列中左邊為小於根節點的部分,右邊大於根節點。
#include using namespace std;
bool issearchtree(int *numbers, int
left, int
right)
intmid = i - 1;
for (; i < right; ++i)
bool result = true;
if (mid >= left)
result = issearchtree(numbers, left, mid);
if (mid + 1
< right)
result = issearchtree(numbers, mid + 1, right - 1);
return result;
}int main() ;
int *numbers = a;
bool result = issearchtree(numbers, 0, 6);
cout << result << endl;
return 0;
}
《劍指Offer》面試題 平衡二叉樹
題目 輸入乙個二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。思路 用後序遍歷實現 先遍歷節點的左右子樹,左右子樹都平衡才來判斷該節點是否平衡,如果左右子樹中有不平衡的,則直接返回false,避免了從上往下逐個節點地計算深度帶來...
《劍指Offer》面試題 二叉樹的深度
題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。思路 此題的遞迴思想比較簡單,直接用遞迴將根節點的深度轉換為求左右子孩子的深度的較大值 1,根節點的深度等於max 左孩子的深度,右孩子的深度 輸入 第一行輸入有n,n表...
劍指Offer 面試題19 映象二叉樹
操作給定的二叉樹,將其變換為源二叉樹的映象。以題目中的兩棵樹為例 就是先序遍歷這棵樹,如果當前正在遍歷的節點有子結點 無論是左還是右 就交換兩個子節點,當交換完所有的非葉子結點的左右子結點的時候,就得到了樹的映象.具體過程如下所示 注意6和10交換之後,第三層結點的排列順序 遞迴實現 public ...