寻找下一个结点
题目描述
请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。
给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。
基本方案,按照题目描述即可实现。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Successor { public: vector<int> vec; void inorder(TreeNode* root){ if(root){ inorder(root->left); vec.push_back(root->val); inorder(root->right); } } int findSucc(TreeNode* root, int p) { // write code here if(root==nullptr) return -1; inorder(root); for(int i=0,len=vec.size();i<len-1;i++){ if(p==vec[i]){ return vec[i+1]; } } return -1; } };
基本方法简单,但是采用了递归算法且空间复杂度O<n>。可以使用使用二叉树的非递归遍历算法。
posted on 2016-06-13 15:36 echoorchid 阅读(114) 评论(0) 编辑 收藏 举报