Thinking process - in order traversal

https://discuss.leetcode.com/topic/3988/no-fancy-algorithm-just-simple-and-powerful-in-order-traversal/2

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    private TreeNode prevNode = null;
    private TreeNode swapNode1 = null;
    private TreeNode swapNode2 = null;
    public void recoverTree(TreeNode root) {
        //ArrayList<TreeNode> swappedNodes = new ArrayList<>();
        //in-order traversal
        dfsHelper(root);

        //swap two nodes

        int tmp = swapNode1.val;
        swapNode1.val = swapNode2.val;
        swapNode2.val = tmp;
    }

    private void dfsHelper(TreeNode root) {
        if (root == null) return ;

        dfsHelper(root.left);

        if (swapNode1 == null && prevNode != null && prevNode.val > root.val) {
            swapNode1 = prevNode;
        }

        if (swapNode1 != null && prevNode != null && prevNode.val > root.val) {
            swapNode2 = root;
        }

        prevNode = root;

        dfsHelper(root.right);
    }


}

Morris traversal

  • using O(1) extra space to do in-order traversal

https://www.youtube.com/watch?v=wGXB9OWhPTg

results matching ""

    No results matching ""