二叉搜尋樹第K小元素
阿新 • • 發佈:2018-12-17
1.思路:迭代法
計算出二叉樹左節點的個數,如果左節點的個數等於k-1;則根節點就是我們要找的值,如果左節點的個數大於k-1,表明我們要查詢的第k個最小元素在左子樹中,如果左節點的個數小於k-1,表明要查詢的第k個最小元素在右子節點中,找到右子樹中第k-count(left)-1個元素就是我們要找的元素
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int kthSmallest(TreeNode root, int k) { /* 迭代 */ int leftcon=count(root.left); if(leftcon==k-1) return root.val; if(leftcon>k-1) return kthSmallest(root.left, k); return kthSmallest( root.right, k-leftcon-1); } public int count(TreeNode root){ if(root==null) return 0; return 1+count(root.left)+count(root.right); } }
2.中序遍歷;中序遍歷二叉搜尋樹,排序是一個從小到大的陣列
class Solution { private int cnt=0; private int val; public int kthSmallest(TreeNode root, int k) { //中序遍歷 inOrder(root,k); return val; } public void inOrder(TreeNode node,int k){ if(node==null) return; inOrder(node.left,k); cnt++; if(cnt==k){ val=node.val; return; } inOrder(node.right,k); } }