length.cpp 951 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "tree.c"
  2. TreeNode* findLCA(TreeNode* root, int node1, int node2) {
  3. if (root == NULL || root->val == node1 || root->val == node2) {
  4. return root;
  5. }
  6. TreeNode* left = findLCA(root->left, node1, node2);
  7. TreeNode* right = findLCA(root->right, node1, node2);
  8. if (left != NULL && right != NULL) {
  9. return root;
  10. }
  11. return (left != NULL) ? left : right;
  12. }
  13. int findLevel(TreeNode* root, int val, int level) {
  14. if (root == NULL) return -1;
  15. if (root->val == val) return level;
  16. int left = findLevel(root->left, val, level + 1);
  17. if (left != -1) return left;
  18. return findLevel(root->right, val, level + 1);
  19. }
  20. int nodeDistance(TreeNode *root, int node1, int node2) {
  21. TreeNode* lca = findLCA(root, node1, node2);
  22. if (lca == NULL) return -1;
  23. int d1 = findLevel(lca, node1, 0);
  24. int d2 = findLevel(lca, node2, 0);
  25. if (d1 == -1 || d2 == -1) return -1;
  26. return d1 + d2;
  27. }
备用站点 当前处于降级运行的备用站点,仅供应急访问,数据和功能可能不是最新。