博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客OJ:二叉搜索树第K个节点
阅读量:4059 次
发布时间:2019-05-25

本文共 1118 字,大约阅读时间需要 3 分钟。

/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*/struct MyTreeNode{    TreeNode* p;    MyTreeNode* left;    MyTreeNode* right;    int sumL;    int sumR;};class Solution {public:    MyTreeNode* presolve(TreeNode* p,int& k){        if(p == NULL) return NULL;        MyTreeNode* res = new MyTreeNode();        res->p = p;        int sum1 = 0;        int sum2 = 0;        res->left = presolve(p->left,sum1);        res->right = presolve(p->right,sum2);        res->sumL = sum1;        res->sumR = sum2;        k = sum1 + sum2 + 1;        return res;    }    TreeNode* findit(MyTreeNode* p,int k){        if(p == NULL) return NULL;        if(k > p->sumL + p->sumR + 1) return NULL;        if(k == p->sumL + 1) return p->p;        if(k <= p->sumL) return findit(p->left,k);        if(k > p->sumL + 1) return findit(p->right,k-p->sumL-1);        return NULL;    }    TreeNode* KthNode(TreeNode* pRoot, int k)    {        int sum = 0;        MyTreeNode* p = presolve(pRoot,sum);        return findit(p,k);    }    };

转载地址:http://vfwji.baihongyu.com/

你可能感兴趣的文章
java学习(9)类的四大特性2之继承(final)
查看>>
java学习(10)数组
查看>>
java学习(11)位与进制
查看>>
java学习(12)集合(1)
查看>>
java学习(13)集合(2)
查看>>
java学习(14)集合(3)
查看>>
java学习(15)泛型
查看>>
java学习(16)异常处理
查看>>
java学习(17)图形用户界面(1)
查看>>
java学习(18)图形用户界面(2)
查看>>
java学习(19)图形用户界面(3)
查看>>
java学习(20)图形用户界面(4)
查看>>
java学习(21)事件处理机制(1)
查看>>
java学习(22)线程(1)
查看>>
Python学习一之环境配置
查看>>
Python学习二之PyCharm编程软件配置
查看>>
Python学习三之基础语法
查看>>
【opencv学习笔记】022之霍夫圆变换
查看>>
【积跬步以至千里】合并优盘分区
查看>>
【opencv学习笔记】023之像素重映射
查看>>