二叉查詢樹(binary search tree),(又:二叉搜尋樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。
判斷某棵樹是否為二叉搜尋樹
單純判斷每個結點比左孩子大比右孩子小是不對的。如圖:
15推翻了這種方法。
思路:1)可以根據定義判斷,遞迴進行,如果左右子樹都為搜尋二叉樹,且左子樹最大值小於根,右子樹最小值大於根。成立。
2)根據定義,中序遍歷為遞增序列,我們中序遍歷後判斷是否遞增即可。
3)我們可以在中序遍歷過程中判斷之前節點和當前結點的關係,不符合直接返回false即可。
4)進一步通過morris遍歷優化
morris遍歷:
public static class node
} public static boolean isbst(node head)
boolean res = true;
node pre = null;
node cur1 = head;
node cur2 = null;
while (cur1 != null)
if (cur2.right == null) else
}if (pre != null && pre.value > cur1.value)
pre = cur1;
cur1 = cur1.right;
} return res;
}
判斷二叉搜尋樹
判斷是否為二叉搜尋樹有兩種方法 1.遞迴 val表示值 left是左子樹 right是右子樹 lower 下界 比最小值還小 upper 上界 比最大值還大 class solution bool isvalidbst treenode root 2.中序遍歷 由二叉搜尋樹的性質,中序遍歷序列是遞增...
二叉樹 判斷相同二叉搜尋樹
給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。方法 為每個序列建樹,並利用每棵樹的中序遍歷判斷相同 inclu...
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...