11package MustDoEasyList ;
22
3+ import java .util .LinkedList ;
4+ import java .util .Queue ;
5+
36class TreeNode {
47 int val ;
58 TreeNode left ;
@@ -21,7 +24,9 @@ class TreeNode {
2124
2225public class MergeTwoBinaryTrees617 {
2326
27+ // recursive approach
2428 public TreeNode mergeTrees (TreeNode root1 , TreeNode root2 ) {
29+
2530 if (root1 == null && root2 == null )
2631 return null ;
2732 if (root1 == null && root2 != null )
@@ -39,4 +44,51 @@ public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
3944
4045 return merged ;
4146 }
47+
48+ // iterative approach, using BFS
49+ public TreeNode mergeTreesItr (TreeNode root1 , TreeNode root2 ) {
50+ if (root1 == null && root2 == null )
51+ return root1 ;
52+ if (root1 == null && root2 != null )
53+ return root2 ;
54+ if (root2 == null && root1 != null )
55+ return root1 ;
56+
57+ // Queue implementation using LinkedList
58+ Queue <TreeNode > queue = new LinkedList <TreeNode >();
59+ queue .add (root1 );
60+ queue .add (root2 );
61+
62+ while (!queue .isEmpty ()) {
63+ TreeNode a = queue .poll (); // root1 as merged tree
64+ TreeNode b = queue .poll ();
65+
66+ a .val = a .val + b .val ;
67+
68+ if (a .left != null && b .left != null ) {
69+ queue .add (a .left );
70+ queue .add (b .left );
71+ }
72+
73+ if (a .right != null && b .right != null ) {
74+ queue .add (a .right );
75+ queue .add (b .right );
76+ }
77+
78+ if (a .left == null && b .left != null ) {
79+ a .left = b .left ;
80+ queue .add (b .left );
81+ queue .add (new TreeNode (0 ));
82+ }
83+
84+ if (a .right == null && b .right != null ) {
85+ a .right = b .right ;
86+ queue .add (b .right );
87+ queue .add (new TreeNode (0 ));
88+ }
89+ // not checking with b.left and b.right as our final tree is 'a'
90+ }
91+
92+ return root1 ;
93+ }
4294}
0 commit comments