摘要:
题目: 给定一个整数数组, 判断该数组是不是某二叉搜索的后续遍历序列。假设输入的数组的任意两个数字都互不相同。分析: 对于某种访问序列的verify的问题,一般先找到根节点,然后根据题目信息找出左子树与右子树。然后根据当前信息判断当前根节点的合法性,然后递归判断左子树和右子树的合法性。bool varify(int A[], int length){ if(A == NULL || lenght root) break; } for(j = i; j 0) left = verify(A, i); if(i != len -1) right = verify(A + i... 阅读全文
posted @ 2013-09-14 23:25
冰点猎手
阅读(181)
评论(0)
推荐(0)
摘要:
Given a binary tree, return the inorder traversal of its nodes' values.For example:Given binary tree {1,#,2,3}, 1 \ 2 / 3return [1,3,2].Note: Recursive solution is trivial, could you do it iteratively? /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode ... 阅读全文
posted @ 2013-09-14 23:01
冰点猎手
阅读(156)
评论(0)
推荐(0)
摘要:
《剑指offer 面试题22 》模拟题,模拟判断一个弹出序列是否可能是一个压栈序列的弹出序列bool valid(vector pushS, vector popS){ assert(pushS.size() == popS.size()); int len = pushS.size(); if(len == 0) return true; stack mys; int cur = 0; for(int i = 0; i < len ; ++i) { if(pushS[i] == popS[cur]){ cur++; continue; }else if( !... 阅读全文
posted @ 2013-09-14 22:22
冰点猎手
阅读(266)
评论(0)
推荐(0)
摘要:
struct Tree(){ int val; Tree *left, *right; Tree(int a): val(a), left(NULL), right(NULL){}}bool mirrorTree(Tree *root){ if(root == NULL || (root->left== NULL && root->right == NULL)) return NULL ; Tree *tp = root->left; root->left = root->right; root->right = tp; if(root-&g 阅读全文
posted @ 2013-09-14 21:11
冰点猎手
阅读(188)
评论(0)
推荐(0)
摘要:
struct Tree(){ int val; Tree *left, *right; Tree(int a): val(a), left(NULL), right(NULL){}}bool hasSubTree(Tree *root1, Tree * root2){ if(root2 == NULL) return true; if(root1 == NULL) return false; bool result = false; if(root1->val == root2->val) result = isSubTree(root1, root2); if(!result) 阅读全文
posted @ 2013-09-14 17:18
冰点猎手
阅读(304)
评论(0)
推荐(0)
摘要:
struct ListNode{ int val_; ListNode* next; ListNode(int val): val_(val),next(NULL){}};//非递归ListNode *reverse(ListNode *head){ if(head == NULL) return NULL; ListNode* vir = new ListNode(0); vir->next = NULL; ListNode *p = head; while(p != NULL)){ ListNode *q = p->next; p->next =... 阅读全文
posted @ 2013-09-14 16:24
冰点猎手
阅读(197)
评论(0)
推荐(0)
摘要:
void ReorderOddEven(int data[], int n){ if(data == NULL || n < 2) return; int left = 0; int right = n-1; while(left < right) { while(left < right && data[left]&0x01 == 1) ++left; while(left < right && data[right]^0x01 == 0) -- right; if(left < right){ int temp = da 阅读全文
posted @ 2013-09-14 11:17
冰点猎手
阅读(155)
评论(0)
推荐(0)
摘要:
struct Node { int val; Node * next;};void deleteNode(Node ** head, Node * target){ assert(head != NULL && *head != NULL && target != NULL); //头结点的判断 if(*head == target) { *head = target->next; delete target; } //尾节点的判断 if(target->next == NULL){ Node *p = *head; while(*p ->ne 阅读全文
posted @ 2013-09-14 10:50
冰点猎手
阅读(200)
评论(0)
推荐(0)