Yes,it works for binary search tree only

On Sat, Jan 29, 2011 at 2:22 PM, nphard nphard <nphard.nph...@gmail.com>wrote:

> Looks good. I concede that it works for a Binary "Search" Tree.
>
> On Sat, Jan 29, 2011 at 1:35 AM, Ritu Garg <ritugarg.c...@gmail.com>wrote:
>
>> @nphard,see the following approach carefully to know *if right pointer is
>> pointing to right child or in order successor*
>> *
>> *Q = node->right
>> IF (Q is not NULL)
>> {
>>         /*Determine if Q is node's right child or successor*/
>>         /*Q is inorder successor of node*/
>>         IF (Q->left == node OR Q->left->val < node->val)
>>         {
>>         }
>>         /*Q is the right child of node*/
>>        ELSE IF (Q->left == NULL or Q->left->val > node->right)
>>        {
>>        }
>> }
>>
>> 1. Q->left is smaller than or equal to node if Q is Inorder Successor of
>> node
>> 2. Q->left is either NULL or Q->left is greater than node if Q is right
>> child of node
>> *
>> *Hence* in order traversal of right threaded BST without flag* is
>> possible
>>
>>
>>
>>
>>
>> On Fri, Jan 28, 2011 at 9:40 AM, nphard nphard 
>> <nphard.nph...@gmail.com>wrote:
>>
>>> Not correct. You cannot assume that the right node always points to the
>>> successor. If you do that, your traversal will be affected. Consider that
>>> when you reach a node B from the right pointer of its parent A, you traverse
>>> that subtree rooted at B in normal inorder. However, when you reach B from
>>> its inorder predecessor C, you should have the knowledge that you have
>>> visited that node's left subtree and should not visit again (which is only
>>> known if you have the information that you are reaching that node through a
>>> thread).
>>>
>>> On Thu, Jan 27, 2011 at 10:57 PM, Ritu Garg <ritugarg.c...@gmail.com>wrote:
>>>
>>>> @nphard
>>>>
>>>> ideally,a flag is required in right threaded tree to distinguish whether
>>>> right child is a pointer to inorder successor or to right child.Even we can
>>>> do without flag assuming that  there ll be no further insertions taking
>>>> place in tree and no other traversal is required.
>>>>
>>>> here we suppose that right pointer always gives the successor......
>>>>
>>>> The solution to get the linear inorder traversal is just tailored for a
>>>> situation where there is no extra space,not even for stack!!!
>>>>
>>>> On Fri, Jan 28, 2011 at 5:42 AM, nphard nphard <nphard.nph...@gmail.com
>>>> > wrote:
>>>>
>>>>> @Ritu - Do you realize that you cannot just convert a given binary tree
>>>>> into right-threaded binary tree? You need at least 1 bit information at 
>>>>> each
>>>>> node to specify whether the right pointer of that node is a regular 
>>>>> pointer
>>>>> or pointer to the inorder successor. This is because traversal is done
>>>>> differently when you arrive at a node through its inorder predecessor.
>>>>>
>>>>>   On Thu, Jan 27, 2011 at 7:22 AM, Ritu Garg 
>>>>> <ritugarg.c...@gmail.com>wrote:
>>>>>
>>>>>>   solution is not too hard to understand!!
>>>>>> 1. [quote] For every none leaf node , go to the last node in it's left
>>>>>>
>>>>>>
>>>>>> subtree and mark the right child of that node as x [\quote]. How are
>>>>>> we going to refer to the right child now ??We have removed it's
>>>>>> reference now !!
>>>>>>
>>>>>> last node in left sub tree of any node always have right pointer as
>>>>>> NULL because this is the last node
>>>>>>
>>>>>> 2. It is to be repeated for every node except the non leaf nodes .
>>>>>> This
>>>>>>
>>>>>> will take O(n*n) time in worst case , say a leftist tree with only
>>>>>> left pointers . root makes n-1 traversals , root's left subtree's root
>>>>>> makes n-2 , and so on.
>>>>>> i said that it ll take O(n) time for well balanced tree.
>>>>>> for a node at height h ,it takes O(h) to fill this node as successor
>>>>>> of some other node.if combined for all sum(O(h)) h=1 to lg n ..total 
>>>>>> time ll
>>>>>> come as O(n)
>>>>>>
>>>>>> 3. Take the case below .
>>>>>>
>>>>>>
>>>>>>        1
>>>>>>   2         3
>>>>>> 1      1.5   2.5       4
>>>>>>
>>>>>> for node 2 , you will go to 1 , which is the successor of 2 , you make
>>>>>> 2->right=1 .... but what about node 1.5 ???
>>>>>> same is the case with node 3 ... 3->right=2.5 . How will we refer to 4
>>>>>> now ??
>>>>>>
>>>>>> when you ll process node 1,it ll be filled in as right child of 1.5
>>>>>> there is no successor for 4.
>>>>>>
>>>>>> In Brief
>>>>>>
>>>>>> 1. Convert the tree to right threaded binary tree.means all right
>>>>>> children point to their successors.
>>>>>> it ll take no additional space.ll take O(n) time if tree is well
>>>>>> balanced
>>>>>>
>>>>>> 2. Do inorder traversal to find ith element without using extra space
>>>>>> because succssor of each node is pointed by right child.
>>>>>>
>>>>>> i hope you got it now!!
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Jan 26, 2011 at 5:31 PM, sankalp srivastava <
>>>>>> richi.sankalp1...@gmail.com> wrote:
>>>>>>
>>>>>>> I don't seem to understand ur solution .
>>>>>>> [quote] For every none leaf node , go to the last node in it's left
>>>>>>> subtree and mark the right child of that node as x [\quote]. How are
>>>>>>> we going to refer to the right child now ??We have removed it's
>>>>>>> reference now !!
>>>>>>>
>>>>>>> It is to be repeated for every node except the non leaf nodes . This
>>>>>>> will take O(n*n) time in worst case , say a leftist tree with only
>>>>>>> left pointers . root makes n-1 traversals , root's left subtree's
>>>>>>> root
>>>>>>> makes n-2 , and so on.
>>>>>>>
>>>>>>> Go to the largest node in the left subtree .This means go to the left
>>>>>>> subtree and keep on going to the right until it becomes null  , in
>>>>>>> which case  , you make y->right as x . This means effectively , that
>>>>>>> y
>>>>>>> is the predecessor of x , in the tree . Considering a very good code
>>>>>>> ,
>>>>>>> it may take O(1) space , but you will still need additional pointers.
>>>>>>> Take the case below .
>>>>>>>
>>>>>>>        1
>>>>>>>   2         3
>>>>>>> 1      1.5   2.5       4
>>>>>>>
>>>>>>> for node 2 , you will go to 1 , which is the successor of 2 , you
>>>>>>> make
>>>>>>> 2->right=1 .... but what about node 1.5 ???
>>>>>>> same is the case with node 3 ... 3->right=2.5 . How will we refer to
>>>>>>> 4
>>>>>>> now ??
>>>>>>>
>>>>>>> Now using inorder traversal with a count , I will start at 1->left ,
>>>>>>> 2-
>>>>>>> >left = 1 , then 2 ... then 2->right = 1 again . then 1 , and then 1-
>>>>>>> >right=3 ...clearly , this will not give us a solution .
>>>>>>> A reverse inorder looks just fine to me .
>>>>>>>
>>>>>>> On Jan 26, 3:14 pm, Ritu Garg <ritugarg.c...@gmail.com> wrote:
>>>>>>> > @Algoose
>>>>>>> >
>>>>>>> > I said ..*.For every node x,go to the last node in its left subtree
>>>>>>> and mark
>>>>>>> > the right child of that node as x.*
>>>>>>> >
>>>>>>> > it is to be repeated for all nodes except leaf nodes.
>>>>>>> > to apply this approach ,you need to go down the tree.No parent
>>>>>>> pointers
>>>>>>> > required.
>>>>>>> > for every node say x whose left sub tree is not null ,go to the
>>>>>>> largest node
>>>>>>> > in left sub-tree say y.
>>>>>>> > Set  y->right = x
>>>>>>> > y is the last node to be processed in left sub-tree of x hence x is
>>>>>>> > successor of y.
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> > On Wed, Jan 26, 2011 at 3:27 PM, Algoose chase <
>>>>>>> harishp...@gmail.com> wrote:
>>>>>>> > > @ritu
>>>>>>> > > how would you find a successor without extra space if you dont
>>>>>>> have a
>>>>>>> > > parent pointer ?
>>>>>>> > > for Instance from the right most node of left subtree to the
>>>>>>> parent of left
>>>>>>> > > subtree(root) ?
>>>>>>> > > @Juver++
>>>>>>> > > Internal stack does count as extra space !!
>>>>>>> >
>>>>>>>  > > On Wed, Jan 26, 2011 at 3:02 PM, ritu <ritugarg.c...@gmail.com>
>>>>>>> wrote:
>>>>>>> >
>>>>>>> > >> No,no extra space is needed.
>>>>>>> > >> Right children which are NULL pointers are replaced with pointer
>>>>>>> to
>>>>>>> > >> successor.
>>>>>>> >
>>>>>>> > >> On Jan 26, 1:18 pm, nphard nphard <nphard.nph...@gmail.com>
>>>>>>> wrote:
>>>>>>> > >> > If you convert the given binary tree into right threaded
>>>>>>> binary tree,
>>>>>>> > >> won't
>>>>>>> > >> > you be using extra space while doing so? Either the given tree
>>>>>>> should
>>>>>>> > >> > already be right-threaded (or with parent pointers at each
>>>>>>> node) or
>>>>>>> > >> internal
>>>>>>> > >> > stack should be allowed for recursion but no extra space usage
>>>>>>> apart
>>>>>>> > >> from
>>>>>>> > >> > that.
>>>>>>> >
>>>>>>> > >> > On Wed, Jan 26, 2011 at 3:04 AM, ritu <
>>>>>>> ritugarg.c...@gmail.com> wrote:
>>>>>>> > >> > > it can be done in O(n) time using right threaded binary
>>>>>>> tree.
>>>>>>> > >> > > 1.Convert the tree to right threaded tree.
>>>>>>> > >> > > right threaded tree means every node points to its successor
>>>>>>> in
>>>>>>> > >> > > tree.if right child is not NULL,then it already contains a
>>>>>>> pointer to
>>>>>>> > >> > > its successor Else it needs to filled up as following
>>>>>>> > >> > >      a. For every node x,go to the last node in its left
>>>>>>> subtree and
>>>>>>> > >> > > mark the right child of that node as x.
>>>>>>> > >> > > It Can be done in O(n) time if tree is a balanced tree.
>>>>>>> >
>>>>>>> > >> > > 2. Now,Traverse the tree with Inorder Traversal without
>>>>>>> using
>>>>>>> > >> > > additional space(as successor of any node is available O(1)
>>>>>>> time) and
>>>>>>> > >> > > keep track of 5th largest element.
>>>>>>> >
>>>>>>> > >> > > Regards,
>>>>>>> > >> > > Ritu
>>>>>>> >
>>>>>>> > >> > > On Jan 26, 8:38 am, nphard nphard <nphard.nph...@gmail.com>
>>>>>>> wrote:
>>>>>>> > >> > > > Theoretically, the internal stack used by recursive
>>>>>>> functions must
>>>>>>> > >> be
>>>>>>> > >> > > > considered for space complexity.
>>>>>>> >
>>>>>>> > >> > > > On Mon, Jan 24, 2011 at 5:40 AM, juver++ <
>>>>>>> avpostni...@gmail.com>
>>>>>>> > >> wrote:
>>>>>>> > >> > > > > internal stack != extra space
>>>>>>> >
>>>>>>> > >> > > > > --
>>>>>>> > >> > > > > You received this message because you are subscribed to
>>>>>>> the Google
>>>>>>> > >> > > Groups
>>>>>>> > >> > > > > "Algorithm Geeks" group.
>>>>>>> > >> > > > > To post to this group, send email to
>>>>>>> algogeeks@googlegroups.com.
>>>>>>> > >> > > > > To unsubscribe from this group, send email to
>>>>>>> > >> > > > > algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>>>>> <algogeeks%2Bunsubscribe@googlegroups .com>
>>>>>>> > >> <algogeeks%2bunsubscr...@googlegroups.com<algogeeks%252bunsubscr...@googlegroups.com>
>>>>>>> <algogeeks%252Bunsubscribe@googleg roups.com>
>>>>>>> >
>>>>>>> > >> > > <algogeeks%2bunsubscr...@googlegroups.com<algogeeks%252bunsubscr...@googlegroups.com>
>>>>>>> <algogeeks%252Bunsubscribe@googleg roups.com>
>>>>>>> > >> <algogeeks%252bunsubscr...@googlegroups.com<algogeeks%25252bunsubscr...@googlegroups.com>
>>>>>>> <algogeeks%25252Bunsubscribe@goo glegroups.com>
>>>>>>> >
>>>>>>> > >> > > > > .
>>>>>>> > >> > > > > For more options, visit this group at
>>>>>>> > >> > > > >http://groups.google.com/group/algogeeks?hl=en.
>>>>>>> >
>>>>>>> > >> > > --
>>>>>>> > >> > > You received this message because you are subscribed to the
>>>>>>> Google
>>>>>>> > >> Groups
>>>>>>> > >> > > "Algorithm Geeks" group.
>>>>>>> > >> > > To post to this group, send email to
>>>>>>> algogeeks@googlegroups.com.
>>>>>>> > >> > > To unsubscribe from this group, send email to
>>>>>>> > >> > > algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>>>>> <algogeeks%2Bunsubscribe@googlegroups .com>
>>>>>>> > >> <algogeeks%2bunsubscr...@googlegroups.com<algogeeks%252bunsubscr...@googlegroups.com>
>>>>>>> <algogeeks%252Bunsubscribe@googleg roups.com>
>>>>>>>  >
>>>>>>> > >> > > .
>>>>>>> > >> > > For more options, visit this group at
>>>>>>> > >> > >http://groups.google.com/group/algogeeks?hl=en.
>>>>>>> >
>>>>>>> > >> --
>>>>>>> > >> You received this message because you are subscribed to the
>>>>>>> Google Groups
>>>>>>> > >> "Algorithm Geeks" group.
>>>>>>> > >> To post to this group, send email to algogeeks@googlegroups.com
>>>>>>> .
>>>>>>> > >> To unsubscribe from this group, send email to
>>>>>>> > >> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>>>>> <algogeeks%2Bunsubscribe@googlegroups .com>
>>>>>>> > >> .
>>>>>>> > >> For more options, visit this group at
>>>>>>> > >>http://groups.google.com/group/algogeeks?hl=en.
>>>>>>> >
>>>>>>> > >  --
>>>>>>> > > You received this message because you are subscribed to the
>>>>>>> Google Groups
>>>>>>> > > "Algorithm Geeks" group.
>>>>>>> > > To post to this group, send email to algogeeks@googlegroups.com.
>>>>>>> > > To unsubscribe from this group, send email to
>>>>>>> > > algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>>>>> <algogeeks%2Bunsubscribe@googlegroups .com>
>>>>>>> > > .
>>>>>>> > > For more options, visit this group at
>>>>>>> > >http://groups.google.com/group/algogeeks?hl=en.
>>>>>>>
>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "Algorithm Geeks" group.
>>>>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>>>>> To unsubscribe from this group, send email to
>>>>>>> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>>>>> .
>>>>>>> For more options, visit this group at
>>>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Algorithm Geeks" group.
>>>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>>>> To unsubscribe from this group, send email to
>>>>>> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>>>> .
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>>
>>>>>
>>>>> --
>>>>>  You received this message because you are subscribed to the Google
>>>>> Groups "Algorithm Geeks" group.
>>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>>> To unsubscribe from this group, send email to
>>>>> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>>> .
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>>
>>>>
>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Algorithm Geeks" group.
>>>> To post to this group, send email to algogeeks@googlegroups.com.
>>>> To unsubscribe from this group, send email to
>>>> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/algogeeks?hl=en.
>>>>
>>>
>>>  --
>>> You received this message because you are subscribed to the Google Groups
>>> "Algorithm Geeks" group.
>>> To post to this group, send email to algogeeks@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/algogeeks?hl=en.
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Algorithm Geeks" group.
>> To post to this group, send email to algogeeks@googlegroups.com.
>> To unsubscribe from this group, send email to
>> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/algogeeks?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com<algogeeks%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to