第一题:把二元查找树转变成排序的双向链表
2014-05-24 11:23
337 查看
题目博客:http://blog.csdn.net/v_JULY_v/article/details/6057286
题目:
1.把二元查找树转变成排序的双向链表(树)
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ /
6 14
/ / / /
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};
。。。。
我先把创建了新结点的代码贴出来吧。
代码为:
看了别人的再改的。
哎。。迭代。。总是理不清楚啊。。。有时候不知道怎么迭代啊!!!!
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
bbbbbbbbbbbbbb
题目:
1.把二元查找树转变成排序的双向链表(树)
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ /
6 14
/ / / /
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};
。。。。
我先把创建了新结点的代码贴出来吧。
代码为:
__author__ = 'Administrator' class TreeNode: def __init__(self,value,leftChild=None,rightChild=None): d=locals() d.pop("self") codeObject=self.__init__.im_func.func_code argumentNames=codeObject.co_varnames[1:codeObject.co_argcount] for name in argumentNames: setattr(self,name,d[name]) class LinkedNode: def __init__(self,value,pre=None,next=None): d=locals() d.pop("self") codeObj=self.__init__.im_func.func_code argumentNames=codeObj.co_varnames[1:codeObj.co_argcount] for n in argumentNames: setattr(self,n,d ) def __cmp__(self, other): return cmp(self.value,other.value) class LinkedList: def __init__(self,head=None): self.head=None def Add(self,nodevalue): newnode=LinkedNode(value=nodevalue) if not self.head: self.head=newnode else: self.AddNode(newnode,self.head) def AddNode(self,newnode,curNode): if curNode<newnode: if not curNode.next: curNode.next,newnode.pre=newnode,curNode elif curNode.next<newnode: self.AddNode(newnode,curNode.next) else: curNode.next.pre,newnode.next=newnode,curNode.next curNode.next,newnode.pre=newnode,curNode else: if not curNode.pre: curNode.pre,newnode.next=newnode,curNode if newnode<self.head: self.head=newnode else: if curNode.pre>newnode: self.AddNode(newnode,curNode.pre) else: curNode.pre.next,newnode.pre=newnode,curNode.pre curNode.pre,newnode.next=newnode,curNode if newnode<self.head: self.head=newnode if __name__=="__main__": node4=TreeNode(4) node8=TreeNode(8) node12=TreeNode(12) node16=TreeNode(16) node6=TreeNode(6,rightChild=node8,leftChild=node4) node14=TreeNode(14,leftChild=node12,rightChild=node16) node10=TreeNode(10,leftChild=node6,rightChild=node14) linkedlist=LinkedList() for node in [node4,node6,node8,node10,node12,node14,node16]: linkedlist.Add(node.value) curnode=linkedlist.head while 1: if not curnode: break else: print curnode.value curnode=curnode.next但是不新建结点的话,怎么做呢。。。呃呃。。。。
看了别人的再改的。
class TreeNode: def __init__(self,value,leftChild=None,rightChild=None): d=locals() d.pop("self") codeObject=self.__init__.im_func.func_code argumentNames=codeObject.co_varnames[1:codeObject.co_argcount] for name in argumentNames: setattr(self,name,d[name]) def treeToLinkedList( root): head,tail=None,None head,tail=helper(head,tail,root) return head def helper(begin,end,root): b_end,e_begin=None,None if not root: begin,end=None,None return begin,end begin,b_end=helper(begin,b_end,root.leftChild) e_begin,end=helper(e_begin,end,root.rightChild) if not b_end: begin=root else: b_end.rightChild,root.leftChild=root,begin if e_begin: e_begin.leftChild,root.rightChild=root,e_begin else: end=root return begin,end if __name__=="__main__": node4=TreeNode(4) node8=TreeNode(8) node12=TreeNode(12) node16=TreeNode(16) node6=TreeNode(6,rightChild=node8,leftChild=node4) node14=TreeNode(14,leftChild=node12,rightChild=node16) node10=TreeNode(10,leftChild=node6,rightChild=node14) curnode=treeToLinkedList(node10) while 1: if not curnode: break else: print curnode.value curnode=curnode.rightChild呵呵。。。。相比而言,自己做的次真的是又臭又长。。。
哎。。迭代。。总是理不清楚啊。。。有时候不知道怎么迭代啊!!!!
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
bbbbbbbbbbbbbb
相关文章推荐
- 微软100题-第一题把二元查找树转变成排序的双向链表
- 第一题(二元查找树转变成排序的双向链表)
- 把二元查找树转变成排序的双向链表——精选微软经典的算法面试100题中第一题
- 第一题 把二元查找树转变成排序的双向链表
- 数据结构面试题1.2.1-把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 面试题:把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- [何海涛][数据结构][把二元查找树转变成排序的双向链表]浅析
- 将二元查找树转变为排序的双向链表
- 把二元查找树转变成排序的双向链表
- 1.把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- (1)把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- (程序员面试题精选(01))把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表…
- 转载 把二元查找树转变成排序的双向链表