二叉搜索樹的第k個結點


題目描述
給定一棵二叉搜索樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8) 中,按結點數值大小順序第三小結點的值為4。

分析
二叉搜索樹的一個特點就是二叉搜索樹的中序遍歷得到的序列是遞增有序的,那么想要獲得節點數值大小順序第幾,可以通過中序遍歷得到的序列獲得。

方法一
采用ArrayList保存獲得的序列

	TreeNode KthNode(TreeNode pRoot, int k) {
		
		if(pRoot == null || k <= 0) {
			return null;
		}
		ArrayList<TreeNode> list = new ArrayList<TreeNode>();
		MiddleList(pRoot, list);
		
		if(k > list.size()) {
			return null;
		}
		return list.get(k - 1);
		
	}
	
	public void MiddleList(TreeNode node, ArrayList<TreeNode> list) {
		if(node != null) {
			MiddleList(node.left, list);
			list.add(node);
			MiddleList(node.right, list);
		}
	}

方法二
在遞歸時通過一個計數器,這里需要注意的是當計數器等於k值時表示已經找到相應的節點,這時候需要一層層的返回該節點。

	int index = 0;
	TreeNode KthNode_2(TreeNode pRoot, int k) {
		if(pRoot != null) {
			TreeNode node = KthNode_2(pRoot.left, k);
			
			if(node != null) {
				return node;
			}
			index++;
			if(index == k) {
				return pRoot;
			}
			node = KthNode_2(pRoot.right, k);
			if(node != null) {
				return node;
			}
		}
		return null;
		
		
	}


免責聲明!

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



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