-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathThreaded-Binary-Tree
83 lines (70 loc) · 1.7 KB
/
Threaded-Binary-Tree
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package com.tree.traversal.threaded;
public class ThreadedBinaryTree {
public static void main(String[] args) {
TreeNode dummy = new TreeNode(-1);
TreeNode ten = new TreeNode(10);
TreeNode eight = new TreeNode(8);
TreeNode twelve = new TreeNode(12);
TreeNode fifteen = new TreeNode(15);
TreeNode two = new TreeNode(2);
TreeNode seven = new TreeNode(7);
//Adding left and right child nodes
ten.left = eight;
ten.right = twelve;
eight.left = fifteen;
eight.right = two;
two.left = seven;
dummy.left = ten;
dummy.right = dummy;
dummy.rightThread = true;
//Adding threads
fifteen.right = eight;
fifteen.rightThread = true;
seven.right = two;
seven.rightThread = true;
two.right = ten;
two.rightThread = true;
twelve.right = dummy;
twelve.rightThread = true;
inorder(dummy);
}
//Returns Inorder traversal
public static void inorder(TreeNode node) {
TreeNode curr = leftmost(node);
//while node is not null and is not the dummy node
while(curr != null && curr.val != -1) {
//Process Node
System.out.print(curr.val +" ");
//Update curr
if(curr.rightThread)
curr = curr.right;
else
curr = leftmost(curr.right);
}
}
//Returns non-null leftnost child for the node
private static TreeNode leftmost(TreeNode node) {
if(node == null)
return null;
while(node.left != null)
node = node.left;
return node;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
boolean rightThread;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right, boolean rightThread) {
this.val = val;
this.left = left;
this.right = right;
this.rightThread = rightThread;
}
}