驗證二叉搜索樹 遞歸方式實現 java代碼


 

1.介紹:

給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。

假設一個二叉搜索樹具有如下特征:

  • 節點的左子樹只包含小於當前節點的數。
  • 節點的右子樹只包含大於當前節點的數。
  • 所有左子樹和右子樹自身必須也是二叉搜索樹。

2.示例

 

3.解題思想

看過不少代碼,基本上沒有寫的很清楚的,可能是大佬比較厲害吧,基本上只寫了一些思想什么的。

本次的解題思路主要是分為兩步

1.把搜索二叉樹依照中序遍歷的排序方式放進棧中(實現方式是遞歸,具體可以查看代碼)

2.判斷棧的順序是不是從小到大排序(由於棧是后進先出,所以判斷數據是逐漸遞減即可)

4.代碼

 1
public boolean isValidBST(TreeNode root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
sort(root, stack);
if (stack.empty()) return true;
TreeNode node = stack.pop();
while (node != null && !stack.empty()) {
TreeNode node1 = stack.pop();
if (node.val <= node1.val) return false;
node = node1;
}
return true;
}

public void sort(TreeNode treeNode, Stack<TreeNode> stack) {
if (treeNode == null) return;
if (treeNode.left != null) sort(treeNode.left, stack);
stack.push(treeNode);
if (treeNode.right != null) sort(treeNode.right, stack);
}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM