06 2016 档案

摘要:bool hasPathSum(TreeNode *root, int sum) { if (root == nullptr)return false; if (root->left == nullptr && root->right == nullptr) return sum == root-> 阅读全文
posted @ 2016-06-21 15:13 牧马人夏峥 阅读(170) 评论(0) 推荐(0) 编辑
摘要:二叉树的最小深度 采用递归的方式求左右结点的高度,注意判断一个结点是否是叶子结点(左右子树都不存大)。 int minDepth(TreeNode *root) { return minDepth(root, false); } int minDepth(TreeNode *root, bool h 阅读全文
posted @ 2016-06-21 13:50 牧马人夏峥 阅读(74) 评论(0) 推荐(0) 编辑
摘要:参考:http://www.cnblogs.com/zsb517/archive/2012/06/20/2556508.html 阅读全文
posted @ 2016-06-19 16:22 牧马人夏峥 阅读(140) 评论(0) 推荐(0) 编辑
摘要:和上题思路基本一致,不同的地方在于,链表不能随机访问中间元素。 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 牧马人夏峥 阅读(97) 评论(0) 推荐(0) 编辑
摘要:思路很简单,用二分法,每次选中间的点作为根结点,用左、右结点递归。 TreeNode* sortedArrayToBST(vector<int> &num) { return sortedArrayToBST(num.begin(), num.end()); } template<typename 阅读全文
posted @ 2016-06-17 16:04 牧马人夏峥 阅读(111) 评论(0) 推荐(0) 编辑
摘要:判断是否是有效的二叉搜索树,即左子树的值小于根结点,右子树的值大于根结点。可以采用递归的方式来完成,递归时如何 传递有效的参数与根结点进行比较,是此题的难点。 1 bool isValidBST(TreeNode *root) 2 { 3 isValidBST(root, INT_MIN, INT_ 阅读全文
posted @ 2016-06-16 11:30 牧马人夏峥 阅读(121) 评论(0) 推荐(0) 编辑
摘要:根据先序和中序构造二叉树、根据中序和后序构造二叉树,基础题,采用递归的方式解决,两题的方法类似。需要注意的是迭代器的用法。 //先序和中序 TreeNode *buildTree(vector<int>& preorder, vector<int>& inorder) { return buildT 阅读全文
posted @ 2016-06-07 16:35 牧马人夏峥 阅读(142) 评论(0) 推荐(0) 编辑
摘要:void connect(TreeLinkNode *root) { while (root) { //每一层循环时重新初始化 TreeLinkNode *prev = nullptr; TreeLinkNode *next = nullptr; //对于每一层 for (; root; root 阅读全文
posted @ 2016-06-01 16:04 牧马人夏峥 阅读(114) 评论(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 牧马人夏峥 阅读(129) 评论(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) 编辑

点击右上角即可分享
微信分享提示