二叉树中两个子节点的最近公共节点
2011-08-25 17:27
169 查看
求二叉树中两个子节点的最近公共节点
// 树节点 struct node { struct node* left; struct node* right; int val; node(int t=0) { val = t; left = 0; right = 0; } }; typedef struct node* link; // 构造树 void insert_tree(link &h, int t) { if (0 == h) { h = new node(t); return; } if (t < h->val) insert_tree(h->left, t); else insert_tree(h->right, t); } // 找最近公共节点,保存在ans中 bool descend(link &root, link &pre, link &ans, int v1, int v2) { if (root == 0) return false; bool mid = (root->val == v1) || (root->val == v2); bool left = descend(root->left, root, ans, v1, v2); bool right = descend(root->right, root, ans, v1, v2); if (mid && (left || right)) ans = pre; else if (left && right) ans = root; return mid || left || right; } int _tmain(int argc, _TCHAR* argv[]) { link h = 0; link pre=0, ans=0; insert_tree(h, 5); insert_tree(h, 4); insert_tree(h, 6); insert_tree(h, 3); insert_tree(h, 7); insert_tree(h, 8); descend(h, pre, ans, 7, 8); if (ans !=0) cout<< ans->val <<endl; else cout<< "no"<<endl; return 0; }
相关文章推荐
- 寻找二叉树中两个子节点的最近父节点
- 找寻二叉树中两个节点的公共父节点中最近的那个节点的三种情况
- 寻找二叉树两个节点的最近公共祖先
- [LeetCode]236 二叉树的最近公共父亲节点
- 求二叉树中两个节点的最近公共节点的C程序实现代码
- 二叉树相关操作(遍历、路径、最近公共父节点、重构)
- 找寻二叉树中两个节点的公共父节点中最近的那个节点的三种情况
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离
- 求二叉树中两个节点的最近公共祖先节点
- 在二叉树中查找两个节点的最近的公共祖先节点(有回溯指针)(NCA--nearest common ancestor)
- 寻找二叉树中两个子节点的最近父节点
- 235. Lowest Common Ancestor of a Binary Search Tree (求二叉树中两个节点的最近公共祖先)
- LCA问题:求二叉树中任意两个节点的最近公共祖先
- 求二叉树中两节点的最近公共祖先
- 二叉树最近公共祖先节点
- 判断二叉树是不是完全二叉树/求两节点最近的公共祖先
- 求二叉树中两个节点的最近公共祖先
- 二叉树中两个节点的最近公共祖先节点方法全集
- 求两个节点的最近公共祖先多种解法&&判断一个节点是否在二叉树中
- 二叉树最近公共祖先节点