Reputation: 8513
I am trying to create a tree from a source that provides: the 2 nodes to be added to the tree, and the node which these 2 news nodes should be added. To find where this node is in the tree, I used a inorder traversal which takes O(n). So if there was n number of nodes to be added in the tree, will the creation of the whole tree be O(n^2). My constraint is that it should only take O(n) to create the tree.
Upvotes: 3
Views: 19674
Reputation: 5706
Looking up a node in a binary tree is O(log(n))
because the tree has log(n)
levels (each level holds twice as much as the level above it). Therefore to create/insert n
elements into a binary tree it's O(nlog(n))
.
Upvotes: 11
Reputation: 73625
You could keep references to each node of the tree in a HashMap [1], to get O(1)
access to each node instead of the O(log(n))
which is typical of trees. That would make it possible to build the tree in O(n)
time, because that HashMap lets you jump directly to a node instead of traversing there from the tree's root node.
[1] The key would be whatever the source uses for uniquely identifying the nodes (I'm assuming it to be an integer or string). The value would be a reference to the node in the tree. Note that the tree implementation must make all its nodes public, so you will probably need to write the tree yourself or find a suitable library (JDK's trees such as TreeMap keep their internal structure private, so they won't cut it).
Upvotes: 6
Reputation: 11
for Binary search tree time complexity will be O(nlogn) when the elements are not sorted and sorted it takes O(n^2). It is because to to insert one element in a sorted list in a BST O(n) time is taken so for n elements O(n^2) and for a balanced or almost balanced binary search tree max time for insertion is logn so for n elements it is nlogn
Upvotes: 1