Recover BST

问题描述

Two elements of a binary search tree (BST) are swapped by mistake.

Recover the tree without changing its structure. 

 

解决思路

递归思路。

中序遍历的过程中,第一个违反顺序的节点一定是错误节点的其中一个;第二个违反顺序的节点的下一个节点是另外一个错误节点。

 

程序

public class RecoverBST {

	private TreeNode pre = null;

	private TreeNode n1 = null;

	private TreeNode n2 = null;

	

	public void recoverBST(TreeNode root) {

		if (root == null) {

			return;

		}

		inorderTraversal(root);

		if (n1 != null && n2 != null) {

			int tmp = n1.val;

			n1.val = n2.val;

			n2.val = tmp;

		}

	}



	private void inorderTraversal(TreeNode root) {

		if (root==null) {

			return;

		}

		inorderTraversal(root.left);

		if (pre != null && pre.val > root.val) {

			n2 = root; // second error node's next

			if (n1 == null) {

				n1 = pre; // first error node

			}

		}

		pre = root;

		inorderTraversal(root.right);

	}

}

  

你可能感兴趣的:(over)