上一页 1 ··· 33 34 35 36 37 38 39 40 41 ··· 62 下一页
摘要: 和上题思路基本一致,不同的地方在于,链表不能随机访问中间元素。 int listLength(ListNode* node) { int n = 0; while (node) { n++; node = node->next; } return n; } ListNode* nth_node(Li 阅读全文
posted @ 2016-06-17 16:43 牧马人夏峥 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 思路很简单,用二分法,每次选中间的点作为根结点,用左、右结点递归。 TreeNode* sortedArrayToBST(vector<int> &num) { return sortedArrayToBST(num.begin(), num.end()); } template<typename 阅读全文
posted @ 2016-06-17 16:04 牧马人夏峥 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 判断是否是有效的二叉搜索树,即左子树的值小于根结点,右子树的值大于根结点。可以采用递归的方式来完成,递归时如何 传递有效的参数与根结点进行比较,是此题的难点。 1 bool isValidBST(TreeNode *root) 2 { 3 isValidBST(root, INT_MIN, INT_ 阅读全文
posted @ 2016-06-16 11:30 牧马人夏峥 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 根据先序和中序构造二叉树、根据中序和后序构造二叉树,基础题,采用递归的方式解决,两题的方法类似。需要注意的是迭代器的用法。 //先序和中序 TreeNode *buildTree(vector<int>& preorder, vector<int>& inorder) { return buildT 阅读全文
posted @ 2016-06-07 16:35 牧马人夏峥 阅读(141) 评论(0) 推荐(0) 编辑
摘要: void connect(TreeLinkNode *root) { while (root) { //每一层循环时重新初始化 TreeLinkNode *prev = nullptr; TreeLinkNode *next = nullptr; //对于每一层 for (; root; root 阅读全文
posted @ 2016-06-01 16:04 牧马人夏峥 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 将左子树接到右子树之前,递归解决 void flatten(TreeNode *root) { if (root == nullptr)return; flatten(root->left); flatten(root->right); //如果没有左子树,直接返回即可 if (root->left 阅读全文
posted @ 2016-06-01 15:13 牧马人夏峥 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 用递归的方式来做,左右两棵子树的高度差不超过1。分成两部分,一部分递归得到树的高度,一部分递归检查左右子树是否是平衡二叉树。 int getHeight(TreeNode *root) { if (root == nullptr)return 0; return max(getHeight(root 阅读全文
posted @ 2016-06-01 14:38 牧马人夏峥 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 用递归比较简单,这里用迭代的方式实现。注意什么时候返回true,什么时候返回false。 bool isSameTree(TreeNode *p, TreeNode *q) { stack<TreeNode *> s; s.push(p); s.push(q); while (!s.empty()) 阅读全文
posted @ 2016-06-01 14:12 牧马人夏峥 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 中序遍历二叉搜索树,得到的是一个有序的结果,找出其中逆序的地方就可以了。如果逆序的地方相邻,只需把逆序的相换即可;如果不相邻,则需要找到第二个逆序对的 第二个元素再做交换。 定义两个指针p和q来指定需要交换的元素,指针pre记录当前结点的前驱结点,用来判断是否逆序。 void recoverTree 阅读全文
posted @ 2016-05-30 16:29 牧马人夏峥 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 采用广度优先遍历,一个变量记录层数,一个变量记录方向. void traverse(TreeNode *root, vector<vector<int>> result, int level, bool left_to_right) { if (!root)return; //如果进入下一层了,则r 阅读全文
posted @ 2016-05-30 14:57 牧马人夏峥 阅读(141) 评论(0) 推荐(0) 编辑
上一页 1 ··· 33 34 35 36 37 38 39 40 41 ··· 62 下一页