摘要: 题目: 给你一个树,请你 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。 分析:中序遍历后进行建树 方法一:递归中序遍历结果存到向量中,再根据向量中的值进行建树 void inorder(TreeNode* root,vector<int> &v 阅读全文
posted @ 2020-09-08 20:01 Hello-Vivi 阅读(188) 评论(0) 推荐(0)
摘要: 方法:用递归函数求出每个子树的高度,再判断|高度差|>1时不是平衡二叉树 bool isBalanced(TreeNode* root) { if(root==NULL) return true;//空树是平衡二叉树 //前序遍历式的递归 int left=height(root->left); i 阅读全文
posted @ 2020-09-05 21:29 Hello-Vivi 阅读(167) 评论(0) 推荐(0)
摘要: 方法一:判断中序遍历数列是否递增(非递归) bool isValidBST(TreeNode* root) { stack <TreeNode*>s; TreeNode* p=root; if(root==NULL) return true; long long temp=(long long)IN 阅读全文
posted @ 2020-09-05 21:16 Hello-Vivi 阅读(434) 评论(0) 推荐(0)
摘要: 力扣这两算法的方法差不对,一并整理。 (一)判断B是否是A的子树 recur(A, B) 函数: 终止条件:当节点 BB 为空:说明树 BB 已匹配完成,因此返回 true;当节点 AA 为空:说明已经越过树 AA 叶子节点,即匹配失败,返回 false;当节点 AA 和 BB 的值不同,返回 fa 阅读全文
posted @ 2020-09-02 20:22 Hello-Vivi 阅读(309) 评论(0) 推荐(0)
摘要: 将二叉树常见的递归算法罗列如下: (一)前序/中序/后序遍历 以中序为例: void inorder(Node* root){ //从根节点的指针开始 if(root!=NULL){ inorder(root->left); cout<<root->data<<" "; inorder(root-> 阅读全文
posted @ 2020-08-18 21:32 Hello-Vivi 阅读(1844) 评论(0) 推荐(1)
摘要: 非递归层次遍历: 利用队列先进先出特性,分层次存储入队后输出。(下面代码是常见的一个) void levelorder(Node* root){ queue<Node*> q; //指针队列 Node* p=root; //p依次遍历树 q.push(p); while(!q.empty()){ N 阅读全文
posted @ 2020-08-18 20:11 Hello-Vivi 阅读(374) 评论(0) 推荐(0)
摘要: 万能的代码,以后请多指教 阅读全文
posted @ 2020-08-17 22:14 Hello-Vivi 阅读(55) 评论(0) 推荐(0)