1. 程式人生 > >判斷兩個二叉樹是否相同(c++遞迴實現)

判斷兩個二叉樹是否相同(c++遞迴實現)

判斷兩棵二叉樹是否為同一棵樹,需要比較兩個方面:
一:結構是否相同;
二:每個節點上的元素是否相同;
當二者都滿足的時候才可判定二者為同一棵二叉樹。
結構相同包括節點的個數以及每個節點上的子樹相同。
下面是程式碼實現。

#include<iostream>
using namespace std;

typedef struct Node* TNode;
struct Node{
    int data;
    TNode left;
    TNode right;
};
void Print(TNode T);
TNode BuildTree(TNode T, int N);  //建立二叉樹
TNode Insert(TNode T,int i); //在樹中插入一個元素 bool Compare(TNode T1, TNode T2); //比較兩個二叉樹是不是同一棵樹 int main() { int N, L; TNode T; cin >> N; while(N != 0){ cin >> L; T = BuildTree(T, N); while(L--){ TNode T1; T1 = BuildTree(T1, N); if(Compare(T, T1)) cout <<
"Yes" << endl; else cout << "No" << endl; } cin >> N; } return 0; } TNode BuildTree(TNode T, int N) { TNode p, s; int i; cin >> i; T = new Node(); T->data = i; T->left = NULL; T->right = NULL; while(--N){ cin >>
i; T = Insert(T, i); } return T; } TNode Insert(TNode T,int i) { if(T){ if(i > T->data) T->right = Insert(T->right, i); else if(i < T->data) T->left = Insert(T->left, i); } else{ T = new Node(); T->data = i; T->left = NULL; T->right = NULL; } return T; } bool Compare(TNode T1, TNode T2) { if(T1 && T2 && (T1->data==T2->data)){ if(Compare(T1->left, T2->left) && Compare(T1->right, T2->right)) //若根節點相同,遞迴判斷節點的左右子樹是否相同 return true; else return false; } else if(T1==NULL && T2==NULL) //如果都是空樹,二者相同 return true; else return false; //其他情況,二者不同 }
```

“`

相關推薦

判斷是否相同c++實現

判斷兩棵二叉樹是否為同一棵樹,需要比較兩個方面: 一:結構是否相同; 二:每個節點上的元素是否相同; 當二者都滿足的時候才可判定二者為同一棵二叉樹。 結構相同包括節點的個數以及每個節點上的子樹相同。 下面是程式碼實現。 #include<i

用Java程式碼寫一個判斷是否相同

判斷兩個二叉樹是否相同,我覺得應該從三個方面來判斷: 1、若兩個二叉樹都是空樹,則返回true,可認為兩個二叉樹相同; 2、若兩個二叉樹一個為空,一個不為空樹,則兩個二叉樹不相同,返回false; 3、若兩個二叉樹都不為空樹,則判斷兩個節點所指的值是否相同,若相同,則用遞迴

LeetCode--Same Tree(判斷是否相同)Python

題目: 給定兩個二叉樹,判斷這兩個二叉樹是否完全相同。 解題思路: 直接通過中序遍歷、前序遍歷或者後續遍歷遍歷這兩棵二叉樹,得到兩個list結果,判斷這兩個list是否相同,相同返回True,否則返回False。需要注意考慮葉子節點的情況。 程式碼(Python): #

LeetCode刷題之三:判斷是否相同

題目為: Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are str

每天一道LeetCode-----判斷是否相同

Same Tree 判斷兩個二叉樹是否是相同的,相同的依據是 二叉樹結構相同 二叉樹對應節點值相同 遞迴即可,先判斷當前節點是否相同,然後比較對應的兩個子樹 程式碼如下 /**

判斷是否相等函式

bool pd(st *p, st *q) {     if(p==NULL && q==NULL) return true;     else if(p==NULL || q==NU

面試題---判斷結構是否相同

一、首先這個問題是判斷二叉樹的結構是否相同,所以這就和二叉樹的資料的值無關。只需要判斷結構;判斷兩個二叉樹的結構是否相同很簡單。 採用遞迴的思想: (1)如果兩棵二叉樹都為空,返回真 (2)

Leetcode#100. Same Tree(判斷相同)

題目 Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are

leetcode 100 Same Tree 判斷是否相等

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *

LeetCode刷題Easy篇是否相同

題目 Given two binary trees, write a function to check if they are the same or not. Two binary trees are considered the same if they are structurall

007-100-判斷是否相等 Same Tree

Question Given two binary trees, write a function to check if they are the same or not. Two binary trees are considered the same

判斷是否相同之java實現

package com.cb.java.algorithms.jianzhioffer.tree; /** * 判斷兩個二叉樹是否相同 * * @author 36184 * */ pub

[leetcode]Same Tree(判斷是否相等 C語言實現)

Same Tree Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if th

——判斷是否相等先序和中序遍歷序列建立

需求: 利用先序遍歷序列和中序遍歷序列來建立兩棵二叉樹,並判斷是否相等 需要先將建立二叉樹 建立的方法是將該二叉樹的先序的序列和中序的序列分別儲存到Pre陣列和Mid陣列中,它們的儲存順序如下: 判斷兩棵樹是否相等 採用遞迴的方法,用先序,中序

劍指offer之求的深度的層次遍歷Java實現

劍指offer上一道比較基礎的題目,但這個解法不僅可以求二叉樹的深度同時可以求二叉樹的最大層數,某一層的某一個節點 是一種比較通用的方法! 先建立資料模型 package Binary_tree; public class Node {//二叉樹節點 priva

層次遍歷求的高度

來自大佬群主的第二題 所謂層次遍歷,是將二叉樹中的元素從根節點按照節點層數一層層的輸出。 程式碼如下: int GetDepth(bitreenode *root) { int dep

【資料結構】---------面試題具體的所有實現

實現二叉樹的相關的操作: 先序遍歷樹(遞迴) 中序遍歷樹(遞迴) 後序遍歷樹(遞迴) 層序遍歷樹 建立一棵樹 樹的銷燬 樹的拷貝 二叉樹中節點的個數 二叉樹葉子節點的個數 二叉樹第K層節點的個數 樹的高度 在二叉樹中查詢節點 找當前節點的左子樹

LeetCode 100 給定,編寫一個函式來檢驗它們是否相同。 如果在結構上相同,並且節點具有相同的值,則認為它們是相同的。

給定兩個二叉樹,編寫一個函式來檢驗它們是否相同。 如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。 /** * Definition for a binary tree node. * struct TreeNode { *

leetcode算法題2: 合並歸,如何切入並保持清醒?

leetcode算法題2: 合並兩個二叉樹。遞歸 如何切入並保持清醒? /* Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees

的最低公共祖先節點

tla urn span boolean false get ren last etl TreeNode getLastCommonParent(TreeNode root,TreeNode t1,TreeNode t2){ if(findNode(roo