Binary Trees question. Checking for similar shape

Hi I'm stuck doing this, not sure how to go about it.

If I have two binary trees, how would I check if the have the same shape? Data in the nodes doesn't matter, just if the tree structures are equal.

Any ideas on how to solve this problem?
LVL 1
ubuntuguyAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
InteractiveMindConnect With a Mentor Commented:
How exactly do you define 'same shape'? Suppose two trees are the reflection of each other (so they're symmetric), would you consider them the same?

You could just start with the first node on each tree; count the number of sub-nodes. If they're the same, then for each sub-node, count their sub-nodes, are they the same in each case? And so on.
0
 
ubuntuguyAuthor Commented:
well i meant the structures are the same. data in the nodes can be different. i.e.

                      3
                   /       \
                4        23
              /              
          34  

and
                      5
                    /       \
                 9         99
               /              
           44

have the same structure.  on the other hand

                      3
                    /       \
                 4        23
               /              
           34  


and

                      3
                    /       \
                 4        23
               /  \            
           34   55

dont have the same structure.  
               
0
 
crossdevCommented:
If you want a binary tree, meaning that it could be unbalanced you'll need to create one.  Otherwise there is an implmenetation of a Red / Black tree which will stay balanced called TreeMap

http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeMap.html
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
crossdevCommented:
Ignore that last post.

You could create an algorithm that counted the number of leaf nodes and then checked the length of each leaf.  

So the top exampl has 2 leafs with a depth os 3 & 2 :  [3,2]

The fourth one has three leafs with depths of [3,3,2]

You could use this signature to determine.
0
 
crossdevConnect With a Mentor Commented:
Keep in mind this sort of exercise is to test your ability to trouble shoot.  The solution itself has little usefulness.  however your ability to solve it is what matters.  If you find such a problem difficult or impossible, consider another career path.  

I should not that the solution I gave will get you on the right track but is not the entire solution.  I don;t like solving peoples homework.  Iwill nudge you in the right direction.  If anyone gives you the solution, I hope they employ you caue I'll weed you out.  Short cuts only affect you.  If you take the time to figure it out you'll be doing yourself no harm, but if you try to short cut the process you will only hurt your learning process.

Good luck.
0
 
ozoConnect With a Mentor Commented:
same( a,b){
  if( a is a terminal node and b is a terminal node ) return true
  if( a is an interior node and b is an interior node and same(a.left,b.left) and same(a.right,b.right) ) return true
  else return false;
}
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.