二叉树的比较 ~ isSameTree算法实现

字节三面的一道面试题,判断是否是相同二叉树

1 var isSameTree = function (p, q) {
2   if (p === null && q === null) return true;
3   if (p === null && q !== null) return false;
4   if (p !== null && q === null) return false;
5   if (p.val !== q.val) return false;
6   return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
7 };

原文地址:https://www.cnblogs.com/ajaxkong/p/12009198.html

时间: 2024-07-29 06:08:53

二叉树的比较 ~ isSameTree算法实现的相关文章

二叉树的层序遍历、二叉树叶节点输出算法、求二叉树的高度、层序创建一棵二叉树

二叉树的层序遍历 1 void LevelorderTraversal(BinTree BT) 2 { 3 std::queue<BinTree> Queue; 4 BinTree T; 5 if (!BT) 6 return; //若是空树则直接返回 7 Queue.push(BT); 8 while (!Queue.empty()) 9 { 10 T = Queue.front(); 11 Queue.pop(); 12 printf("%c ", T->Data

巧妙地用二叉树完成算式计算算法&lt;计算器,二叉树,C++,独辟蹊径&gt;

#01.引言,我们知道算式计算的问题是栈里面一个非常经典的题目.但是用栈来实现是一个非常麻烦的过程,第一要解决算式判断,是否为符合规则的算式,第二要由中最表达式转化为后缀表达式.这两个部分是栈实现计算算式表达式的比较复杂的地方.不仅如此,栈实现里面的各种运算符的优先级,各种条件判断,可以说是麻烦的要命.但是,实际上有一种数据结构比栈更适合解决这类问题.可以说是得天独厚的优势.对,就是二叉树.例如一个表达式:1+2*3-4/5 我们构造这样一个二叉树 当构造这样一个二叉树之后,解决表达式的值的方法

二叉树的各种遍历算法-leetcode Binary Tree Postorder Traversal 扩展

二叉树的各种遍历方法有  前序遍历   中序遍历    后序遍历  层序遍历.其中前三种遍历有递归程序可以实现,但是我们也有必要掌握其非递归版本的算法实现.正好在leetcode中遇到了遍历二叉树的问题,今天在这里一并总结了. 首先,引用leetcode中关于二叉树节点的定义. 1 // Definition for binary tree 2 struct TreeNode { 3 int val; 4 TreeNode *left; 5 TreeNode *right; 6 TreeNode

二叉树几种遍历算法的非递归实现

二叉树遍历的非递归实现 相对于递归遍历二叉树,非递归遍历显得复杂了许多,但换来的好处是算法的时间效率有了提高.下面对于我学习非递归遍历二叉树算法的过程进行总结 为了便于理解,这里以下图的二叉树为例,分析二叉树的三种遍历方式的实现过程. 一.非递归实现二叉树的前序遍历 不借助递归,要实现二叉树的前序遍历,我们需要用到前面学过的栈这种数据结构.根据前序遍历的定义,先访问根节点,再访问左子树,最后访问右子树.声明指向节点的指针pCur,我们可以先访问根节点,之后让根节点进栈,并让pCur在左子树上移动

二叉树的线索化算法思想详解

二叉树的线索化,这几天以来我很难掌握,今天终于想通了,哈哈,首先我们来看看二叉树线索化之后会变成什么样子,这里我们以图中的二叉树为例,图如下: 画的太糙,各位看官讲究着看吧- -.所谓二叉树的线索化,就是当一个节点的左右指针为空时,就让它的左右指针指向该节点的前驱或者后继(一般来说左指针指向前驱,右指针指向后继).这里不论指向前驱或者后继,我们都应该线索化时,至少要明确两个节点指针的值,当前节点和当前节点的前驱/后继.这也是线索化的两种思路: 保存前驱:访问当前节点时若当前节点的左指针为空,则令

二叉树后序遍历算法实现

对于二叉树的三种遍历方式,它们的难易程度是不一样的,最简单的是先序遍历,其次是中序遍历,最难的是后序遍历方式.但是最难的后序遍历方式,却可以通过最简单的先序遍历方式的变形实现,然后把遍历的结果逆序一下就搞定了.哈哈,物极必反啊! 先看一个最简单的后序的遍历方法的实现,利用先序遍历方式的变形,然后逆序 vector<int> PostOrder(TreeNode *root) { vector<int> result; stack<const TreeNode*> s;

二叉树几种遍历算法

<span style="font-size:14px;">/*二叉树的遍历*/ #include <iostream> #include <cstring> #include <stack> using namespace std; typedef struct node { char data; struct node *lchild,*rchild; }BinTree; typedef struct node1 { BinTree

D13-平衡二叉树[Java数据结构和算法]

1.平衡二叉树基本介绍 1.1平衡二叉树又叫平衡二叉搜索树(Selg-balancing binary search tree),又叫AVL树,可以保证查询效率较高: 1.2 平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是平衡二叉树. 1.3 平衡二叉树的常用实现方法有红黑树,AVL,替罪羊树,Treap,伸展树等: 2. AVL左旋转 2.1 左旋转流程(右子树的高度高) 2.2 右旋转流程(左子树的高度高) 2.3 双旋转,存在以下的情况不能单单进行一方

二叉树的后续遍历算法实现

1 // 递归算法 2 template <class T> 3 void postOrder(void (*visit)(BinTreeNode<T>* t), BinTreeNode<T>* root) 4 { 5 if (root != NULL) { 6 postOrder(visit, root->leftChild); 7 postOrder(visit, root->rightChild); 8 visit(root); 9 } 10 } 1