עקוף איטרטיבי על פי סדר של עץ בינארי
יש לעקוף עץ בינארי ללא רקורסיה. בכל צומת יש לבצע פונקציה שנותנים על ערך של צומת.
- public static void traverse(BinaryTree tree, Action<BinaryTree> callback) {
- BinaryTree prev = null;
- BinaryTree curr = tree;
- while (curr != null) {
- BinaryTree next;
- if(prev == null || prev == curr.parent) { // from top to bottom
- if(curr.left != null)
- next = curr.left;
- else {
- callback(curr);
- next = curr.right != null ? curr.right : curr.parent;
- }
- } else if (prev == curr.left) { //from left bottom
- callback(curr);
- next = curr.right != null ? curr.right : curr.parent;
- } else { //from right bottom
- next = curr.parent;
- }
- prev = curr;
- curr = next;
- }
- }
- public class BinaryTree {
- public int value;
- public BinaryTree left;
- public BinaryTree right;
- public BinaryTree parent;
- public BinaryTree(int value) {
- this.value = value;
- }
- public BinaryTree(int value, BinaryTree parent) {
- this.value = value;
- this.parent = parent;
- }
- }