recover-binary-search-tree

1. 링크: recover - binary - search - tree 출처: 우 객 망
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Note: 
A solution using O(n ) space is pretty straight forward. Could you devise a constant space solution?

confused what"{1,#,2,3}"means? > read more on how binary tree is serialized on OJ.

OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
   1
  / \
 2   3
    /
   4
    \
     5
The above binary tree is serialized as"{1,2,3,#,#,4,#,#,5}".

2. 사고: 이 진 트 리 에 오류 가 발생 했 는 지, 중간 순서 로 옮 겨 다 니 는 이전 요소 가 현재 요소 보다 작 았 는 지 검색 합 니 다.모두 다음 두 가지 상황 으로 나 뉜 다.
  • {0,1}
  • {2, 3, 1} 앞의 결점 이 현재 결점 보다 크 면 기록 하면 됩 니 다.3. 코드:
  • public class RecoverSearchTree {
        public static void main(String[] args) {
            TreeNode root =new TreeNode(0);
            root.left = new TreeNode(1);
            RecoverSearchTree test = new RecoverSearchTree();
            test.recoverTree(root);
        }
    
        private TreeNode firstErrorNode = null;
        private TreeNode secondErrorNode = null;
        private TreeNode preNode = new TreeNode(Integer.MIN_VALUE);
        public void recoverTree(TreeNode root) {
            inOrder(root);
            int temp = firstErrorNode.val;
            firstErrorNode.val = secondErrorNode.val;
            secondErrorNode.val = temp;
        }
        private void inOrder(TreeNode root) {
    
            if(root == null)
                return;
    
            inOrder(root.left);
    
            if(preNode.val >= root.val ){
                    if(firstErrorNode == null){
                        firstErrorNode = preNode;
                        secondErrorNode = root;
                    }else{
                        secondErrorNode = root;
                    }
            }
            //              
            //              ,         preNode  root
            //             root       
            preNode = root;
    
            inOrder(root.right);
    
        }
    }

    좋은 웹페이지 즐겨찾기