标签:左右 class 二叉树 root 两种 stc bit 不同的 data
1 二叉树中两个节点的最近公共父节点
思路:有两种情况,一是要找的这两个节点(a, b),在要遍历的节点(root)的两侧,那么这个节点就是这两个节点的最近公共父节点;
二是两个节点在同一侧,则 root->left 或者 root->right 为 NULL,另一边返回a或者b。那么另一边返回的就是他们的最小公共父节点。
递归有两个出口,一是没有找到a或者b,则返回NULL;二是只要碰到a或者b,就立刻返回。
// 二叉树结点的描述 typedef struct BiTNode { char data; struct BiTNode *lchild, *rchild; // 左右孩子 }BinaryTreeNode; // 节点只有左指针、右指针,没有parent指针,root已知 BinaryTreeNode* findLowestCommonAncestor(BinaryTreeNode* root , BinaryTreeNode* a , BinaryTreeNode* b) { if(root == NULL) return NULL; if(root == a || root == b) return root; BinaryTreeNode* left = findLowestCommonAncestor(root->lchild , a , b); BinaryTreeNode* right = findLowestCommonAncestor(root->rchild , a , b); if(left && right) return root; return left ? left : right; }
2 最少硬币找零问题为:给予不同面值的硬币若干种种(每种硬币个数无限多),用若干种硬币组合为某种面额的钱,使硬币的的个数最少。
假设有几种硬币,并且数量无限。请找出能够组成某个数目的找零所使用最少的硬币数。例如几种硬币为[1, 3, 5], 面值2的最少硬币数为2(1, 1), 面值4的最少硬币数为2(1, 3), 面值11的最少硬币数为3(5, 5, 1或者5, 3, 3).
问题分析:
假设不同的几组硬币为数组coin[0, ..., n-1]. 则求面值k的最少硬币数count(k), 那么count函数和硬币数组coin满足这样一个条件:
标签:左右 class 二叉树 root 两种 stc bit 不同的 data
原文地址:https://www.cnblogs.com/jiwen/p/11267045.html