Use destructive inorder traversal by right rotations. A right tree rotation preserves inorder traversal but moves the first unvisited node closer to the root:The outer loop invariant states that the labels already passed to
PROCEDURE InorderDestructive(t: Tree; p: Visit);
VAR q: Tree;
BEGIN
WHILE t # NIL DO
WHILE t.left # NIL DO
q := t.left;
t.left := q.right;
q.right := t;
t := q
END;
p(t.label);
t := t.right
END
END InorderDestructive;p, followed by the inorder traversal of t, equal the original inorder traversal. The remaining nodes form a binary tree disjoint from the nodes already visited. The inner loop invariant preserves the remaining inorder traversal: if the old root is , its left child is , and the three unchanged subtrees are , then both shapes have order .At inner-loop exit,
t.left = NIL, so the root is the first remaining node. Visiting it and replacing t by t.right preserves the outer loop invariant. The procedure changes child pointers and makes the old root reference unusable as the original binary tree. Assume p neither changes the binary tree nor depends on its old shape. Articles by others on the same topic
There are currently no matching articles.
