1. 程式人生 > >面試題59:對稱的二叉樹

面試題59:對稱的二叉樹

     題目:請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
class Solution {
public:
    bool isSymmetrical(TreeNode* pRoot)
    {
        if(pRoot == NULL)
            return true;
        return isSymmetrical(pRoot->left,pRoot->right);
        
    }
    bool isSymmetrical(TreeNode *left, TreeNode *right)
    {
        if(left == NULL && right == NULL)
            return true;
        
        else if(left == NULL || right == NULL)
            return false;
            
        if(left->val != right->val)
            return false;
        else 
            return isSymmetrical(left->left,right->right)
                && isSymmetrical(left->right,right->left);
       
    }

};

相關推薦

劍指Offer試題59對稱 Java實現

/************************************************************** * Copyright (c) 2016, * All rights reserved. * 版 本 號:v1.0

《劍指offer》試題7重建

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。 二叉樹節點的定義如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; Binar

試題7重建

style ext str null value var int cti 二叉樹 <?php header("content-type:text/html;charset=utf-8"); /* *重建二叉樹 P62 */ class TreeNode {

劍指offer--試題60列印成多行

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 python實現: # -*- coding:utf-8 -*- # class TreeNode: #     de

【劍指Offer學習】【試題60打印出多行】

題目:從上到下按層列印二叉樹,同一層的結點按從左到右的順序列印,每一層列印一行。 解題思路   用一個佇列來儲存將要列印的結點。為了把二叉樹的每一行單獨列印到一行裡,我們需要兩個變數:一個變量表示在當前的層中還沒有列印的結點數,另一個變量表示下一次結

劍指offer試題7重建(Java實現)

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 思路:可以把二叉樹分為左右子樹分別構建,前序

【劍指Offer學習】【試題6 重建

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如:前序遍歷序列{ 1, 2, 4, 7, 3, 5, 6, 8}和中序遍歷序列{4, 7, 2, 1, 5, 3, 8,6},重建出下圖所示的二叉

劍指Offer(第二版)試題7重建

劍指Offer面試題7:重建二叉樹題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷中都不包含重複的數字。例如前序遍歷序列為{1,2,4,5,3,7,6}和中序遍歷序列{4,2,5,1,7,3,6},則可以重建一棵二叉樹。如圖所示:  

試題59對稱

     題目:請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。 struct TreeNode { int val; s

【劍指Offer學習】【試題59對稱

題目:請實現一個函式來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。 解題思路   通常我們有三種不同的二叉樹遍歷演算法,即前序遍歷、中序遍歷和後序遍歷。在這三種遍歷演算法中,都是先遍歷左子結點再遍歷右子結點。我們是否可以

試題對稱

spa 註意 roo pan code 實現一個函數 如果 面試題 對稱二叉樹 題目描述:請實現一個函數,用來判斷一顆二叉樹是不是對稱的。註意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其為對稱的。 0 1

LeetCode演算法題101對稱解析

給定一個二叉樹,檢查它是否是映象對稱的。 例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面這個 [1,2,2,null,3,null,3] 則不是映象對稱的:

【劍指Offer學習】【試題62序列化二

題目:請實現兩個函式,分別用來序列化和反序列化二叉樹。 解題思路   通過分析解決前面的面試題6.我們知道可以從前序遍歷和中序遍歷構造出一棵二叉樹。受此啟發,我們可以先把一棵二叉樹序列化成一個前序遍歷序列和一箇中序序列,然後再反序列化時通過這兩個序列

劍指offer 試題28對稱 c++

題目:請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。(要想象一下他的結構) 思路:遞迴判斷,左子樹的左子樹和右子樹的右子樹比較,左子樹的右子樹和右子樹的左子樹比較,若相等則是,否則不是。 class Solution { pub

試題28對稱

題意:請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。 思路:同時遍歷當前二叉樹和映象二叉樹,考慮節點是否相同。 節點相同1:節點同時為空 節點相同2:節點同時不為空,並且值相同,並且子樹也相同 程式碼:

試題重建

假設 imp strong copy ret for array tro node 題目描述:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列

試題平衡

depth 二叉樹 面試 true 思路 nod balance urn oot 題目描述:輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 思路:利用上一題求二叉樹的深度 public class Solution { public boolean IsBalan

試題55(平衡

一、題目 輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。 二、關鍵 三、解釋 四、程式碼 #include <cstdio> #include "..\Utilities\

劍指offer 試題重建

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 思路:二叉樹先序是根左右,中序 是左根右。所以先找到

劍指Offer試題6(Java版)重建

題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重新構造出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中不包含重複的數字。例如輸入的前序遍歷序列為{1,2,4,7,3,5,6,8}和中序遍歷為{4,7,2,1,5,3,6,8},則重建出二叉樹並輸出它的頭結點。 在二叉樹的前