编程练习(2)
2016-08-04 06:59
204 查看
链表的回文结构
给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。
测试样例:
1->2->2->1
返回:true
二叉树被记录成文件的过程叫做二叉树的序列化。序列化的方法有很多,这里我们采用括号序列的方法将其序列化,所谓括号序列指的是对于一个节点生成一个括号,括号内是其子树的括号序列,其中左儿子(若存在)的括号在前,右儿子(若存在)的括号在后。对于给定的树,请设计高效的算法,将其序列化。
给定一个树的根节点指针root,请返回一个字符串,代表其序列化后的括号序列。
给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。
测试样例:
1->2->2->1
返回:true
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} };*/ class PalindromeList { public: bool chkPalindrome(ListNode* A) { // write code here ListNode* left=A,*right=A; while(right->next != NULL && right->next->next!=NULL){ left = left->next; right = right->next->next; } right = left->next; while(right->next){ ListNode* temp = right->next; right->next = left; left = right; right = temp; } left = A; while(left < right){ if(left->val != right->val) { return false; } else{ left = left->next; right = right->next; } } return true; } };二叉树的序列化
二叉树被记录成文件的过程叫做二叉树的序列化。序列化的方法有很多,这里我们采用括号序列的方法将其序列化,所谓括号序列指的是对于一个节点生成一个括号,括号内是其子树的括号序列,其中左儿子(若存在)的括号在前,右儿子(若存在)的括号在后。对于给定的树,请设计高效的算法,将其序列化。
给定一个树的根节点指针root,请返回一个字符串,代表其序列化后的括号序列。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class TreeToSequence { public: string toSequence(TreeNode* root) { // write code here if(root == NULL){ return ""; } string resu; resu += "("; resu += toSequence(root->left); resu += toSequence(root->right); resu += ")"; return resu; } };