



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-e27d1b3e03961e68.js","react-dom":"https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@777f63f87cd0" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-e27d1b3e03961e68.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-f4bf1142976e4bbf.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-f661b49995ba0bd8.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-0b38d22346321c92.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-f1c62c9e70259b9f.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-f50cacf0a86b9929.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-e61d4f4ca17852c2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-39c10993d5603fac.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-73236c840c0c7d90.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-0de76f07cc035b10.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-fd1500c8744e40d6.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-ed9ca172356fd545.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-1d2c7f7b52a6068b.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-54ba76e934a49d7c.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-456bd5deb85c7ecd.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-11ee8a031c040c1a.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-2d56bdb0166c0238.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","activity_diff_file_tree","activity_repos_file_tree","activity_repos_overview_header","activity_repos_overview_sidebar","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","alternate_user_config_repo","async_conversion_coverage_enabled","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_view_raf_sticky_lines","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_automation_repo_mcp_servers","copilot_automations_pagination","copilot_chat_auto_mode_v2","copilot_chat_clear_model_selection_for_default_change","copilot_chat_header_reorder","copilot_chat_max_upsell","copilot_chat_models_browser_cache","copilot_chat_vision_dotcom_chat_ga_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_hide_hovercard","copilot_immersive_embedded_header_button","copilot_immersive_file_preview_keep_mounted","copilot_immersive_task_hyperlinking","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_early_stop","copilot_mission_control_environment_list_icons","copilot_mission_control_managed_sandbox_environments","copilot_mission_control_needs_attention","copilot_mission_control_reasoning_effort","copilot_mission_control_sandbox_client_side_clone","copilot_mission_control_sandbox_remote_bypass","copilot_mission_control_session_filters","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_org_policy_page_focus_mode","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_workbench_sunset","copilot_workbench_sunset_redirect","copilot_workbench_ubb","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","glc_code_quality_repo_settings_workflow_config","hide_github_models_ui","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","ipm_ubb_individual_budget_banner","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_optimistic_updates","issue_relative_time_micro","issues_dashboard_sso_structured_errors","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_lazy_load_comment_box_suggestions","issues_optimistic_linked_branch_create","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_cookie_consent_banner","marketing_pages_search_explore_provider","memex_client_env_github_domain","memex_default_issue_create_repository","memex_lazy_hydrate_agent_tasks","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_checks_refetch_dedupe","merge_status_header_feedback","oauth_authorize_clickjacking_protection","octocaptcha_origin_optimization","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","prs_copilot_app_open_action","prs_css_anchor_positioning","pull_request_commit_checks_dialog","pull_request_copilot_attribution_header","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_feedback_dialog","pull_request_virtualization_image_estimate","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","quick_search_lazy_suggestions","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_tanstack_allowed","react_query_props_with_key","react_sandbox_future_tanstack","repo_app_turbo","repo_issues_sidebar_layout","repo_pulls_dashboard_persistence","repo_pulls_dashboard_sidebar_links","repos_contributors_limited_default_range","review_involves_filter","rule_ignored_file_paths","rulesets_actor_list_editor","sample_network_conn_type","security_center_artifact_filters_popover","see_who_reacted","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_global_banner_dev_days_attendee","site_global_banner_learn_copilot_sdk","site_global_nav_spark_models_removed","spark_prompt_secret_scanning","spark_server_connection_status","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","ui_service_compute_proxy_control","ui_service_referrer_metrics","ui_service_staleness_detection","update_issue_suggestions","user_code_paste_ux","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workbench_store_readonly","workstream_plugin_bootstrap"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-e3d808ee18eb9784.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-d0e712808f201ef1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-74e9766bd696d26a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-ecf766ea8a2c7fd6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-8e3d9c5d57d50312.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-cd1b421ad0ad7ed5.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-61cbdbc14ca92159.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.b6099d51b9e67b57.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-86a8f5de995615f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-e88088f989b27670.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-7cdf4e0db98b997c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by-6b3c07383371bf58.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-36f036c13c2e3a4c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/kw-866fd9513ae95106.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r1-b075aab3204f32f9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jz5-7c5d1669717041f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hj-5126390ff433704d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j05-dce4d588268f0f7e.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-1adb1d8c74044da9.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-1a7659d5cb4f8269.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-f3f5d71440009c48.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-76b18916d0c8ec4d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-5109c77d7ac61078.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-fbb00aaa3ab9abdf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/04n-51c49ba758739f13.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-024971cb63acad59.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t-364e19c63d726e9a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6ny-c969fbae697a356f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/yhq-3a209035a30b1a09.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z1v-da5b33b877bfa358.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wo-09f85d22a6c8931b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9y-81cfe57dc9040f3e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j0-41a4cf04cbd99503.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0p-81491ed0d9d666e2.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-acc18f300bdd5b9f.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.5858534b1c27f133.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-f832f583b1c927a9.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-12ebdc24dcff1ecc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ncx-9a860680a5f230b9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j6-363f0ebf4f62f310.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-bf6f21d7e7a43c35.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fe-7576d9b281e2106a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wsr-5fd3071e5a9061ab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0n-ecadb2ffe6b01ba2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xv-51cb34754bda73a9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/n4u-6317ce1c31aed1db.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j8s-d90ce3a169b741ed.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-de176c4ee471f2b3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/eag-d9eea130fa716df9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y2-87df441f1bc5a264.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/kcz-607e36c8a3751cf0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/x4-65dba777efd828f3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gzu-1a09248f686325f6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bi0-e2f78de823e39ca9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/on-95be29ba1ef725d9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b1-1dbc371cef78c3c1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0l5-c4edb8ab48c5846d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/c2z-c92998400310b94b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/f9-038758dcbfe08dab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0k-b7df0a74912a42bf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sp-915c6643cc0d7d44.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/og-93ae8b358505d372.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b9-69d9b60a1b1fcd59.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ec-8ea7978d3fcd114e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/du-a401e69a37d95bcc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ql0-1c18210f6b9e2263.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/20-0a2e46387735f1f4.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/dsj-cb1e4ddbce4f007b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-9f5235d335ab624b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ko6-9e80f7ac359e3c43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/uw-8c275f7ac25b7cf6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bsb-4f4ac8c20da73fac.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/w5-13e3a7548bb20af9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fm-c00a7677663ba326.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z-45022d3da7b8817e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/h0-010921512138e12f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5p-ae5db0820116fb43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/8vq-b2af216e992e11ef.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/g5-88f2a4514daa19ca.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xc-f5d51b571cd317cb.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/arw-51e8918a1b75a80f.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-c72427a42c7b1dd6.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ql0.de7a55ca73db5693.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/z.812a998e1961b84d.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/xc.13e027137438fd9f.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.5099f1f900111d1b.module.css" />

  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hu-1fc0b2a167afc025.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fb-ef2c91536abed646.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-6f8f2a4b24a472b0.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.3ae223c973c2cef3.module.css" />


  <title>leetcode-master/problems/0226.翻转二叉树.md at master · feinan/leetcode-master · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:cb6bbf73-d601-937b-43a5-5cd4f7a7a0da">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="CB2E:1F816C:12403826:1112AB5E:6AACB11C" data-pjax-transient="true"/><meta name="html-safe-nonce" content="8e24a580d2eb9049da03111577398384fc25848463fd6cf9e33c93a4060fb5f1" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDQjJFOjFGODE2QzoxMjQwMzgyNjoxMTEyQUI1RTo2QUFDQjExQyIsInZpc2l0b3JfaWQiOiI3NzE1MjgwMTQxOTM1MjI3MTY0IiwicmVnaW9uX2VkZ2UiOiJmcmEiLCJyZWdpb25fcmVuZGVyIjoiZnJhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="078343154fa8d0d7b10d27c895433e75847124f7a3fbbe862a9b9b12774ba8a6" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:793905675" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - leetcode-master/problems/0226.翻转二叉树.md at master · feinan/leetcode-master">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/4bceb88f33f681892d82d046920e4eee0262c04b0d5eadd239c8051152eac176/feinan/leetcode-master" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="leetcode-master/problems/0226.翻转二叉树.md at master · feinan/leetcode-master" /><meta name="twitter:description" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - feinan/leetcode-master" />
  <meta property="og:image" content="https://opengraph.githubassets.com/4bceb88f33f681892d82d046920e4eee0262c04b0d5eadd239c8051152eac176/feinan/leetcode-master" /><meta property="og:image:alt" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - feinan/leetcode-master" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="leetcode-master/problems/0226.翻转二叉树.md at master · feinan/leetcode-master" /><meta property="og:url" content="https://github.com/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md" /><meta property="og:description" content="《代码随想录》LeetCode 刷题攻略：200道经典题目刷题顺序，共60w字的详细图解，视频难点剖析，50余张思维导图，支持C++，Java，Python，Go，JavaScript等多语言版本，从此算法学习不再迷茫！🔥🔥 来看看，你会发现相见恨晚！🚀  - feinan/leetcode-master" />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="1b7a4ff13706175db9ddcddd8b7c27b8946d9e20d9cdccd9cb54b37d67bc242f" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="0c5c6e5334a905d8f9521e09eadcffba484d422e0d262e07ff922e6bc18b2ac6" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="ec4c7b86d7b57240253150b827ea48b04e08d8760dc6553d2a04f62000f3fe0c" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="4644d0c4c253864cb5744c15cc28e64149f3c1e0e485c44cbd24a4b86ca508ad" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/feinan/leetcode-master git https://github.com/feinan/leetcode-master.git">

  <meta name="octolytics-dimension-user_id" content="1912535" /><meta name="octolytics-dimension-user_login" content="feinan" /><meta name="octolytics-dimension-repository_id" content="793905675" /><meta name="octolytics-dimension-repository_nwo" content="feinan/leetcode-master" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="true" /><meta name="octolytics-dimension-repository_parent_id" content="228016443" /><meta name="octolytics-dimension-repository_parent_nwo" content="youngyangyang04/leetcode-master" /><meta name="octolytics-dimension-repository_network_root_id" content="228016443" /><meta name="octolytics-dimension-repository_network_root_nwo" content="youngyangyang04/leetcode-master" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="4a04228f6072ee1ec5cd2227074bd1c1a8308ce2" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/l7j-2ddd8b435dadae28.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-98a85b4ad3bf8229.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.9f1b311c6a3e620b.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          
          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2l-8671acba87bc0dcb.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/i26-f2ae65b837c90ae7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz5-23f28c0f388769c9.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/lht-26506ea833dda5be.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p1-76a75a6081059b19.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3d-82c347d20a13fb90.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tua-c4ca62c5e0e0318e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4s-c22d880230690e1f.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-5251d405164cfa54.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.6a01c236ff527e7e.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/4s.e3d02f110161be52.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F0226.%25E7%25BF%25BB%25E8%25BD%25AC%25E4%25BA%258C%25E5%258F%2589%25E6%25A0%2591.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=feinan%2Fleetcode-master","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md\",\"user_id\":null}}","auth_hydro_click_hmac":"33a04de9917b04e13b96e25f3652b73bab4bb20736f9651422436d3075097fe6","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="MarketingHeader-module__root__Tk7n3 HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="MarketingHeader-module__visuallyHidden__sqKsl">Navigation Menu</h2><button type="button" class="MarketingHeader-module__backdrop__sw4RU" aria-label="Close navigation menu"></button><div class="MarketingHeader-module__bar__mBSyE"><div class="MarketingHeader-module__topRow__yeury"><div class="MarketingHeader-module__toggleSlot__hDxbh"><button type="button" class="HeaderMenuToggle-module__toggle__i8EiC" aria-label="Toggle navigation" aria-expanded="false"><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span></button></div><a href="/" aria-label="Homepage" class="HeaderLogo-module__logo__UFyHI" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="AuthCTAs-module__mobileActions__NNzeV"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F0226.%25E7%25BF%25BB%25E8%25BD%25AC%25E4%25BA%258C%25E5%258F%2589%25E6%25A0%2591.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="33a04de9917b04e13b96e25f3652b73bab4bb20736f9651422436d3075097fe6"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="MarketingHeader-module__menu__GIy3y"><div class="MarketingHeader-module__menuWrapper__owstH"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5knd_">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Integrate external tools</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dknd_">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_hknd_">EXPLORE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9l7d_">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dl7d_">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;view_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5m7d_">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Fund open source developers</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9m7d_">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dm7d_">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="MarketingNavigation-module__navLink__hUomM">Pricing</a></li></ul></nav><div class="MarketingHeader-module__ctaContainer__tBmPz"><div class="HeaderSearch-module__searchSlot__oVOUS"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderSearch-module__trigger__zsF9q" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="HeaderSearch-module__content__kMpxU"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search HeaderSearch-module__icon__wcrHX" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="HeaderSearch-module__label__d1iWG">Search</span><kbd class="HeaderSearch-module__kbd__HNG0o" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthCTAs-module__signInWrap__q2P60"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq AuthCTAs-module__desktopActionGap__UZuXT AuthCTAs-module__hiddenBelowLg__BfKBw" href="/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F0226.%25E7%25BF%25BB%25E8%25BD%25AC%25E4%25BA%258C%25E5%258F%2589%25E6%25A0%2591.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="33a04de9917b04e13b96e25f3652b73bab4bb20736f9651422436d3075097fe6"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=feinan%2Fleetcode-master" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="33a04de9917b04e13b96e25f3652b73bab4bb20736f9651422436d3075097fe6"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div><div class="MarketingHeader-module__bottomBorder__uZT38" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-6c0acf6b-457a-4c06-b8b1-e2bf8ee9af40" aria-labelledby="tooltip-1813d7b7-22b4-4560-a68f-53909516d358" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-1813d7b7-22b4-4560-a68f-53909516d358" for="icon-button-6c0acf6b-457a-4c06-b8b1-e2bf8ee9af40" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>





  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      








  

    <div id="repository-container-header"  class="tmp-pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace>

        <div class="d-flex flex-nowrap flex-justify-end tmp-mb-3  tmp-px-3 tmp-px-lg-5" style="gap: 1rem;">

          <div class="flex-auto min-width-0 width-fit">
              
  <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked color-fg-muted mr-2 tmp-mr-2">
    <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>
</svg>
    
    <span class="author flex-self-stretch" itemprop="author">
      <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/feinan/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/feinan">
        feinan
</a>    </span>
    <span class="mx-1 flex-self-stretch color-fg-muted">/</span>
    <strong itemprop="name" class="mr-2 flex-self-stretch">
      <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/feinan/leetcode-master">leetcode-master</a>
    </strong>

    <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span>
  </div>
    <span class="text-small lh-condensed-ultra no-wrap mt-1" data-repository-hovercards-enabled>
      forked from <a data-hovercard-type="repository" data-hovercard-url="/youngyangyang04/leetcode-master/hovercard" class="Link--inTextBlock" href="/youngyangyang04/leetcode-master">youngyangyang04/leetcode-master</a>
    </span>


          </div>

          <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;">
              <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
    
      

  <li>
            <a href="/login?return_to=%2Ffeinan%2Fleetcode-master" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="28fc846332f6d3488927c6803e454065619ddc507fb1221d486b31b534d097bc" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2 tmp-mr-2">
    <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path>
</svg>Notifications
</a>    <tool-tip id="tooltip-81ed80c3-6f60-448e-a658-cfec493d40a7" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip>

  </li>

  <li>
          <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Ffeinan%2Fleetcode-master" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:793905675,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="d4551db2c8ac4d00179f91abcfa08d0e6e77b18521a6eddf0da7c4cf9d2ac5ac" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2 tmp-mr-2">
    <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>
</svg>Fork
    <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="4" data-view-component="true" class="Counter">4</span>
</a>
  </li>

  <li>
        <div data-view-component="true" class="BtnGroup d-flex">
        <a href="/login?return_to=%2Ffeinan%2Fleetcode-master" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:793905675,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="0e6f8c6577ba490ac68ea8bd6e986d82b902a648e3692530985ebd2962e3ca59" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2 tmp-mr-2">
    <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path>
</svg><span data-view-component="true" class="d-inline">
          Star
</span>          <span id="repo-stars-counter-star" aria-label="3 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="3" data-view-component="true" class="Counter js-social-count">3</span>
</a></div>
  </li>

</ul>

          </div>
        </div>

          <div id="responsive-meta-container" data-turbo-replace>
</div>


            <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 tmp-px-3 px-md-4 tmp-px-md-4 px-lg-5 tmp-px-lg-5">

  <ul data-view-component="true" class="UnderlineNav-body list-style-none">
      <li data-view-component="true" class="d-inline-flex">
  <a id="code-tab" href="/feinan/leetcode-master" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /feinan/leetcode-master" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-command-id="repositories:go-to-code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        <span data-content="Code">Code</span>
          <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="pull-requests-tab" href="/feinan/leetcode-master/pulls" data-tab-item="i1pull-requests-tab" data-selected-links="repo_pulls checks /feinan/leetcode-master/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-command-id="repositories:go-to-pull-requests" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        <span data-content="Pull requests">Pull requests</span>
          <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="actions-tab" href="/feinan/leetcode-master/actions" data-tab-item="i2actions-tab" data-selected-links="repo_actions /feinan/leetcode-master/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-command-id="repositories:go-to-actions" data-react-nav="actions-workflows" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        <span data-content="Actions">Actions</span>
          <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="projects-tab" href="/feinan/leetcode-master/projects" data-tab-item="i3projects-tab" data-selected-links="repo_projects new_repo_project repo_project /feinan/leetcode-master/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-command-id="repositories:go-to-projects" data-react-nav="repo" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline">
    <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path>
</svg>
        <span data-content="Projects">Projects</span>
          <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="security-and-quality-tab" href="/feinan/leetcode-master/security" data-tab-item="i4security-and-quality-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /feinan/leetcode-master/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-command-id="repositories:go-to-security" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security and quality&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span data-content="Security and quality">Security and quality</span>
          <span id="security-and-quality-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="insights-tab" href="/feinan/leetcode-master/pulse" data-tab-item="i5insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /feinan/leetcode-master/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-command-id="repositories:go-to-insights" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        <span data-content="Insights">Insights</span>
          <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
</ul>
    <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 tmp-pr-3 pr-md-4 tmp-pr-md-4 pr-lg-5 tmp-pr-lg-5 right-0">      <action-menu data-select-variant="none" data-view-component="true">
  <focus-group direction="vertical" mnemonics retain>
    <button id="action-menu-929ebad1-5ce5-43c1-ad9c-a23efd149c3d-button" popovertarget="action-menu-929ebad1-5ce5-43c1-ad9c-a23efd149c3d-overlay" aria-controls="action-menu-929ebad1-5ce5-43c1-ad9c-a23efd149c3d-list" aria-haspopup="true" aria-labelledby="tooltip-0d6c6485-5ea6-48e7-ba36-ce9c3699b7ee" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual">
    <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path>
</svg>
</button><tool-tip id="tooltip-0d6c6485-5ea6-48e7-ba36-ce9c3699b7ee" for="action-menu-929ebad1-5ce5-43c1-ad9c-a23efd149c3d-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip>


<anchored-position data-target="action-menu.overlay" id="action-menu-929ebad1-5ce5-43c1-ad9c-a23efd149c3d-overlay" anchor="action-menu-929ebad1-5ce5-43c1-ad9c-a23efd149c3d-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true">
  <div data-view-component="true" class="Overlay Overlay--size-auto">
    
      <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone">          <action-list>
  <div data-view-component="true">
    <ul aria-labelledby="action-menu-929ebad1-5ce5-43c1-ad9c-a23efd149c3d-button" id="action-menu-929ebad1-5ce5-43c1-ad9c-a23efd149c3d-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap">
        <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-774a05c2-68d1-449c-aa40-8789f98a5da4" href="/feinan/leetcode-master" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Code
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i1pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-fa44c804-7131-4f8f-8320-ee839d7608e0" href="/feinan/leetcode-master/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Pull requests
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i2actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-7d142c35-25d5-4a04-b93e-abc7506e1785" href="/feinan/leetcode-master/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Actions
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i3projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-705afa57-ccbd-4ed9-9eba-45c7f0f074b7" href="/feinan/leetcode-master/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table">
    <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Projects
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i4security-and-quality-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-d8409d14-0d44-4cc3-bbf2-5da078a571d1" href="/feinan/leetcode-master/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Security and quality
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i5insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-91d60fc7-23b3-42e9-8570-aeb81d5bf7dc" href="/feinan/leetcode-master/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Insights
</span>      
</a>
  
</li>
</ul>    
</div></action-list>


</div>
      
</div></anchored-position>  </focus-group>
</action-menu></div>
</nav>

    </div>
  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":1,"text":"226.翻转二叉树","anchor":"226翻转二叉树","htmlText":"226.翻转二叉树"},{"level":2,"text":"算法公开课","anchor":"算法公开课","htmlText":"算法公开课"},{"level":2,"text":"题外话","anchor":"题外话","htmlText":"题外话"},{"level":2,"text":"思路","anchor":"思路","htmlText":"思路"},{"level":3,"text":"递归法","anchor":"递归法","htmlText":"递归法"},{"level":3,"text":"迭代法","anchor":"迭代法","htmlText":"迭代法"},{"level":4,"text":"深度优先遍历","anchor":"深度优先遍历","htmlText":"深度优先遍历"},{"level":4,"text":"广度优先遍历","anchor":"广度优先遍历","htmlText":"广度优先遍历"},{"level":2,"text":"拓展","anchor":"拓展","htmlText":"拓展"},{"level":2,"text":"总结","anchor":"总结","htmlText":"总结"},{"level":2,"text":"其他语言版本","anchor":"其他语言版本","htmlText":"其他语言版本"},{"level":3,"text":"Java:","anchor":"java","htmlText":"Java:"},{"level":3,"text":"Python:","anchor":"python","htmlText":"Python:"},{"level":3,"text":"Go:","anchor":"go","htmlText":"Go:"},{"level":3,"text":"JavaScript:","anchor":"javascript","htmlText":"JavaScript:"},{"level":3,"text":"TypeScript：","anchor":"typescript","htmlText":"TypeScript："},{"level":3,"text":"C:","anchor":"c","htmlText":"C:"},{"level":3,"text":"Swift：","anchor":"swift","htmlText":"Swift："},{"level":3,"text":"Rust:","anchor":"rust","htmlText":"Rust:"},{"level":3,"text":"C#:","anchor":"c-1","htmlText":"C#:"}]},"issueTemplate":null,"discussionTemplate":null,"richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cp align=\"center\" dir=\"auto\"\u003e\n\u003ca href=\"https://www.programmercarl.com/xunlian/xunlianying.html\" rel=\"nofollow\"\u003e\n  \u003cimg src=\"/feinan/leetcode-master/raw/master/pics/训练营.png\" width=\"1000\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\u003cp align=\"center\" dir=\"auto\"\u003e\u003cstrong\u003e\u003ca href=\"/feinan/leetcode-master/blob/master/problems/qita/join.md\"\u003e参与本项目\u003c/a\u003e，贡献其他语言版本的代码，拥抱开源，让更多学习算法的小伙伴们受益！\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e226.翻转二叉树\u003c/h1\u003e\u003ca id=\"user-content-226翻转二叉树\" class=\"anchor\" aria-label=\"Permalink: 226.翻转二叉树\" href=\"#226翻转二叉树\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://leetcode.cn/problems/invert-binary-tree/\" rel=\"nofollow\"\u003e力扣题目链接\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e翻转一棵二叉树。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/b06742f6fb7d026879d57d3a7f7d6294e6784e6d43763a771cb425a4a679ddb6/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303230333139323634343332392e706e67\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/b06742f6fb7d026879d57d3a7f7d6294e6784e6d43763a771cb425a4a679ddb6/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303230333139323634343332392e706e67\" alt=\"226.翻转二叉树\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/20210203192644329.png\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e这道题目背后有一个让程序员心酸的故事，听说 Homebrew的作者Max Howell，就是因为没在白板上写出翻转二叉树，最后被Google拒绝了。（真假不做判断，权当一个乐子哈）\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e算法公开课\u003c/h2\u003e\u003ca id=\"user-content-算法公开课\" class=\"anchor\" aria-label=\"Permalink: 算法公开课\" href=\"#算法公开课\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e\u003ca href=\"https://programmercarl.com/other/gongkaike.html\" rel=\"nofollow\"\u003e《代码随想录》算法视频公开课\u003c/a\u003e：\u003ca href=\"https://www.bilibili.com/video/BV1sP4y1f7q7\" rel=\"nofollow\"\u003e听说一位巨佬面Google被拒了，因为没写出翻转二叉树 | LeetCode：226.翻转二叉树\u003c/a\u003e，相信结合视频再看本篇题解，更有助于大家对本题的理解\u003c/strong\u003e。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e题外话\u003c/h2\u003e\u003ca id=\"user-content-题外话\" class=\"anchor\" aria-label=\"Permalink: 题外话\" href=\"#题外话\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这道题目是非常经典的题目，也是比较简单的题目（至少一看就会）。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e但正是因为这道题太简单，一看就会，一些同学都没有抓住起本质，稀里糊涂的就把这道题目过了。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e如果做过这道题的同学也建议认真看完，相信一定有所收获！\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e思路\u003c/h2\u003e\u003ca id=\"user-content-思路\" class=\"anchor\" aria-label=\"Permalink: 思路\" href=\"#思路\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e我们之前介绍的都是各种方式遍历二叉树，这次要翻转了，感觉还是有点懵逼。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e这得怎么翻转呢？\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e如果要从整个树来看，翻转还真的挺复杂，整个树以中间分割线进行翻转，如图：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/0d24faf67ce1b9af3a2d16aa22c929a3052320fc092d63241542fc4a0c25195d/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303230333139323732343335312e706e67\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/0d24faf67ce1b9af3a2d16aa22c929a3052320fc092d63241542fc4a0c25195d/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303230333139323732343335312e706e67\" alt=\"226.翻转二叉树1\" data-canonical-src=\"https://code-thinking-1253855093.file.myqcloud.com/pics/20210203192724351.png\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e可以发现想要翻转它，其实就把每一个节点的左右孩子交换一下就可以了。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e关键在于遍历顺序，前中后序应该选哪一种遍历顺序？ （一些同学这道题都过了，但是不知道自己用的是什么顺序）\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e遍历的过程中去翻转每一个节点的左右孩子就可以达到整体翻转的效果。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e注意只要把每一个节点的左右孩子翻转一下，就可以达到整体翻转的效果\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e这道题目使用前序遍历和后序遍历都可以，唯独中序遍历不方便，因为中序遍历会把某些节点的左右孩子翻转了两次！建议拿纸画一画，就理解了\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e那么层序遍历可以不可以呢？\u003cstrong\u003e依然可以的！只要把每一个节点的左右孩子翻转一下的遍历方式都是可以的！\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e递归法\u003c/h3\u003e\u003ca id=\"user-content-递归法\" class=\"anchor\" aria-label=\"Permalink: 递归法\" href=\"#递归法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e对于二叉树的递归法的前中后序遍历，已经在\u003ca href=\"https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html\" rel=\"nofollow\"\u003e二叉树：前中后序递归遍历\u003c/a\u003e详细讲解了。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e我们下文以前序遍历为例，通过动画来看一下翻转的过程:\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/6704fa908e08d77bef3d5e2463fc83a59fe48cc4ffb6e0c59b082155017fde0e/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f2545372542462542422545382542442541432545342542412538432545352538462538392545362541302539312e676966\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/6704fa908e08d77bef3d5e2463fc83a59fe48cc4ffb6e0c59b082155017fde0e/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f2545372542462542422545382542442541432545342542412538432545352538462538392545362541302539312e676966\" alt=\"翻转二叉树\" data-animated-image=\"\" data-canonical-src=\"https://code-thinking.cdn.bcebos.com/gifs/%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.gif\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e我们来看一下递归三部曲：\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e确定递归函数的参数和返回值\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e参数就是要传入节点的指针，不需要其他参数了，通常此时定下来主要参数，如果在写递归的逻辑中发现还需要其他参数的时候，随时补充。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e返回值的话其实也不需要，但是题目中给出的要返回root节点的指针，可以直接使用题目定义好的函数，所以就函数的返回类型为\u003ccode\u003eTreeNode*\u003c/code\u003e。\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"TreeNode* invertTree(TreeNode* root)\"\u003e\u003cpre\u003eTreeNode* \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(TreeNode* root)\u003c/pre\u003e\u003c/div\u003e\n\u003col start=\"2\" dir=\"auto\"\u003e\n\u003cli\u003e确定终止条件\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e当前节点为空的时候，就返回\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"if (root == NULL) return root;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (root == \u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root;\u003c/pre\u003e\u003c/div\u003e\n\u003col start=\"3\" dir=\"auto\"\u003e\n\u003cli\u003e确定单层递归的逻辑\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e因为是先前序遍历，所以先进行交换左右孩子节点，然后反转左子树，反转右子树。\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"swap(root-\u0026gt;left, root-\u0026gt;right);\ninvertTree(root-\u0026gt;left);\ninvertTree(root-\u0026gt;right);\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003eswap\u003c/span\u003e(root-\u0026gt;left, root-\u0026gt;right);\n\u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(root-\u0026gt;left);\n\u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(root-\u0026gt;right);\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e基于这递归三步法，代码基本写完，C++代码如下：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Solution {\npublic:\n    TreeNode* invertTree(TreeNode* root) {\n        if (root == NULL) return root;\n        swap(root-\u0026gt;left, root-\u0026gt;right);  // 中\n        invertTree(root-\u0026gt;left);         // 左\n        invertTree(root-\u0026gt;right);        // 右\n        return root;\n    }\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n\u003cspan class=\"pl-k\"\u003epublic:\u003c/span\u003e\n    TreeNode* \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(TreeNode* root) {\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (root == \u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root;\n        \u003cspan class=\"pl-c1\"\u003eswap\u003c/span\u003e(root-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e, root-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e);  \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 中\u003c/span\u003e\n        \u003cspan class=\"pl-c1\"\u003einvertTree\u003c/span\u003e(root-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e);         \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 左\u003c/span\u003e\n        \u003cspan class=\"pl-c1\"\u003einvertTree\u003c/span\u003e(root-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e);        \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 右\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root;\n    }\n};\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e迭代法\u003c/h3\u003e\u003ca id=\"user-content-迭代法\" class=\"anchor\" aria-label=\"Permalink: 迭代法\" href=\"#迭代法\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e深度优先遍历\u003c/h4\u003e\u003ca id=\"user-content-深度优先遍历\" class=\"anchor\" aria-label=\"Permalink: 深度优先遍历\" href=\"#深度优先遍历\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%BF%AD%E4%BB%A3%E9%81%8D%E5%8E%86.html\" rel=\"nofollow\"\u003e二叉树：听说递归能做的，栈也能做！\u003c/a\u003e中给出了前中后序迭代方式的写法，所以本题可以很轻松的写出如下迭代法的代码：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eC++代码迭代法（前序遍历）\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Solution {\npublic:\n    TreeNode* invertTree(TreeNode* root) {\n        if (root == NULL) return root;\n        stack\u0026lt;TreeNode*\u0026gt; st;\n        st.push(root);\n        while(!st.empty()) {\n            TreeNode* node = st.top();              // 中\n            st.pop();\n            swap(node-\u0026gt;left, node-\u0026gt;right);\n            if(node-\u0026gt;right) st.push(node-\u0026gt;right);   // 右\n            if(node-\u0026gt;left) st.push(node-\u0026gt;left);     // 左\n        }\n        return root;\n    }\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n\u003cspan class=\"pl-k\"\u003epublic:\u003c/span\u003e\n    TreeNode* \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(TreeNode* root) {\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (root == \u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root;\n        stack\u0026lt;TreeNode*\u0026gt; st;\n        st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(root);\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e(!st.\u003cspan class=\"pl-c1\"\u003eempty\u003c/span\u003e()) {\n            TreeNode* node = st.\u003cspan class=\"pl-c1\"\u003etop\u003c/span\u003e();              \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 中\u003c/span\u003e\n            st.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e();\n            \u003cspan class=\"pl-c1\"\u003eswap\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e, node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e);\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e) st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e);   \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 右\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e) st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e);     \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 左\u003c/span\u003e\n        }\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root;\n    }\n};\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果这个代码看不懂的话可以再回顾一下\u003ca href=\"https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%BF%AD%E4%BB%A3%E9%81%8D%E5%8E%86.html\" rel=\"nofollow\"\u003e二叉树：听说递归能做的，栈也能做！\u003c/a\u003e。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e我们在\u003ca href=\"https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E7%BB%9F%E4%B8%80%E8%BF%AD%E4%BB%A3%E6%B3%95.html\" rel=\"nofollow\"\u003e二叉树：前中后序迭代方式的统一写法\u003c/a\u003e中介绍了统一的写法，所以，本题也只需将文中的代码少做修改便可。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eC++代码如下迭代法（前序遍历）\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Solution {\npublic:\n    TreeNode* invertTree(TreeNode* root) {\n        stack\u0026lt;TreeNode*\u0026gt; st;\n        if (root != NULL) st.push(root);\n        while (!st.empty()) {\n            TreeNode* node = st.top();\n            if (node != NULL) {\n                st.pop();\n                if (node-\u0026gt;right) st.push(node-\u0026gt;right);  // 右\n                if (node-\u0026gt;left) st.push(node-\u0026gt;left);    // 左\n                st.push(node);                          // 中\n                st.push(NULL);\n            } else {\n                st.pop();\n                node = st.top();\n                st.pop();\n                swap(node-\u0026gt;left, node-\u0026gt;right);          // 节点处理逻辑\n            }\n        }\n        return root;\n    }\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n\u003cspan class=\"pl-k\"\u003epublic:\u003c/span\u003e\n    TreeNode* \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(TreeNode* root) {\n        stack\u0026lt;TreeNode*\u0026gt; st;\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (root != \u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e) st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(root);\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e (!st.\u003cspan class=\"pl-c1\"\u003eempty\u003c/span\u003e()) {\n            TreeNode* node = st.\u003cspan class=\"pl-c1\"\u003etop\u003c/span\u003e();\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (node != \u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e) {\n                st.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e();\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e) st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e);  \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 右\u003c/span\u003e\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e) st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e);    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 左\u003c/span\u003e\n                st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(node);                          \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 中\u003c/span\u003e\n                st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e);\n            } \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e {\n                st.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e();\n                node = st.\u003cspan class=\"pl-c1\"\u003etop\u003c/span\u003e();\n                st.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e();\n                \u003cspan class=\"pl-c1\"\u003eswap\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e, node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e);          \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 节点处理逻辑\u003c/span\u003e\n            }\n        }\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root;\n    }\n};\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果上面这个代码看不懂，回顾一下文章\u003ca href=\"https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E7%BB%9F%E4%B8%80%E8%BF%AD%E4%BB%A3%E6%B3%95.html\" rel=\"nofollow\"\u003e二叉树：前中后序迭代方式的统一写法\u003c/a\u003e。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e广度优先遍历\u003c/h4\u003e\u003ca id=\"user-content-广度优先遍历\" class=\"anchor\" aria-label=\"Permalink: 广度优先遍历\" href=\"#广度优先遍历\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e也就是层序遍历，层数遍历也是可以翻转这棵树的，因为层序遍历也可以把每个节点的左右孩子都翻转一遍，代码如下：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Solution {\npublic:\n    TreeNode* invertTree(TreeNode* root) {\n        queue\u0026lt;TreeNode*\u0026gt; que;\n        if (root != NULL) que.push(root);\n        while (!que.empty()) {\n            int size = que.size();\n            for (int i = 0; i \u0026lt; size; i++) {\n                TreeNode* node = que.front();\n                que.pop();\n                swap(node-\u0026gt;left, node-\u0026gt;right); // 节点处理\n                if (node-\u0026gt;left) que.push(node-\u0026gt;left);\n                if (node-\u0026gt;right) que.push(node-\u0026gt;right);\n            }\n        }\n        return root;\n    }\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n\u003cspan class=\"pl-k\"\u003epublic:\u003c/span\u003e\n    TreeNode* \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(TreeNode* root) {\n        queue\u0026lt;TreeNode*\u0026gt; que;\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (root != \u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e) que.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(root);\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e (!que.\u003cspan class=\"pl-c1\"\u003eempty\u003c/span\u003e()) {\n            \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e size = que.\u003cspan class=\"pl-c1\"\u003esize\u003c/span\u003e();\n            \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e i = \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; i \u0026lt; size; i++) {\n                TreeNode* node = que.\u003cspan class=\"pl-c1\"\u003efront\u003c/span\u003e();\n                que.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e();\n                \u003cspan class=\"pl-c1\"\u003eswap\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e, node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e); \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 节点处理\u003c/span\u003e\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e) que.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e);\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e) que.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e);\n            }\n        }\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root;\n    }\n};\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果对以上代码不理解，或者不清楚二叉树的层序遍历，可以看这篇\u003ca href=\"https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html\" rel=\"nofollow\"\u003e二叉树：层序遍历登场！\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e拓展\u003c/h2\u003e\u003ca id=\"user-content-拓展\" class=\"anchor\" aria-label=\"Permalink: 拓展\" href=\"#拓展\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e文中我指的是递归的中序遍历是不行的，因为使用递归的中序遍历，某些节点的左右孩子会翻转两次。\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e如果非要使用递归中序的方式写，也可以，如下代码就可以避免节点左右孩子翻转两次的情况：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Solution {\npublic:\n    TreeNode* invertTree(TreeNode* root) {\n        if (root == NULL) return root;\n        invertTree(root-\u0026gt;left);         // 左\n        swap(root-\u0026gt;left, root-\u0026gt;right);  // 中\n        invertTree(root-\u0026gt;left);         // 注意 这里依然要遍历左孩子，因为中间节点已经翻转了\n        return root;\n    }\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n\u003cspan class=\"pl-k\"\u003epublic:\u003c/span\u003e\n    TreeNode* \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(TreeNode* root) {\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (root == \u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root;\n        \u003cspan class=\"pl-c1\"\u003einvertTree\u003c/span\u003e(root-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e);         \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 左\u003c/span\u003e\n        \u003cspan class=\"pl-c1\"\u003eswap\u003c/span\u003e(root-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e, root-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e);  \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 中\u003c/span\u003e\n        \u003cspan class=\"pl-c1\"\u003einvertTree\u003c/span\u003e(root-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e);         \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 注意 这里依然要遍历左孩子，因为中间节点已经翻转了\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root;\n    }\n};\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e代码虽然可以，但这毕竟不是真正的递归中序遍历了。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e但使用迭代方式统一写法的中序是可以的。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e代码如下：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c++ notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class Solution {\npublic:\n    TreeNode* invertTree(TreeNode* root) {\n        stack\u0026lt;TreeNode*\u0026gt; st;\n        if (root != NULL) st.push(root);\n        while (!st.empty()) {\n            TreeNode* node = st.top();\n            if (node != NULL) {\n                st.pop();\n                if (node-\u0026gt;right) st.push(node-\u0026gt;right);  // 右\n                st.push(node);                          // 中\n                st.push(NULL);\n                if (node-\u0026gt;left) st.push(node-\u0026gt;left);    // 左\n\n            } else {\n                st.pop();\n                node = st.top();\n                st.pop();\n                swap(node-\u0026gt;left, node-\u0026gt;right);          // 节点处理逻辑\n            }\n        }\n        return root;\n    }\n};\n\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n\u003cspan class=\"pl-k\"\u003epublic:\u003c/span\u003e\n    TreeNode* \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(TreeNode* root) {\n        stack\u0026lt;TreeNode*\u0026gt; st;\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (root != \u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e) st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(root);\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e (!st.\u003cspan class=\"pl-c1\"\u003eempty\u003c/span\u003e()) {\n            TreeNode* node = st.\u003cspan class=\"pl-c1\"\u003etop\u003c/span\u003e();\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (node != \u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e) {\n                st.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e();\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e) st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e);  \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 右\u003c/span\u003e\n                st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(node);                          \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 中\u003c/span\u003e\n                st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e);\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e) st.\u003cspan class=\"pl-c1\"\u003epush\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e);    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 左\u003c/span\u003e\n\n            } \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e {\n                st.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e();\n                node = st.\u003cspan class=\"pl-c1\"\u003etop\u003c/span\u003e();\n                st.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e();\n                \u003cspan class=\"pl-c1\"\u003eswap\u003c/span\u003e(node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eleft\u003c/span\u003e, node-\u0026gt;\u003cspan class=\"pl-smi\"\u003eright\u003c/span\u003e);          \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 节点处理逻辑\u003c/span\u003e\n            }\n        }\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root;\n    }\n};\n\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e为什么这个中序就是可以的呢，因为这是用栈来遍历，而不是靠指针来遍历，避免了递归法中翻转了两次的情况，大家可以画图理解一下，这里有点意思的。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e总结\u003c/h2\u003e\u003ca id=\"user-content-总结\" class=\"anchor\" aria-label=\"Permalink: 总结\" href=\"#总结\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e针对二叉树的问题，解题之前一定要想清楚究竟是前中后序遍历，还是层序遍历。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e二叉树解题的大忌就是自己稀里糊涂的过了（因为这道题相对简单），但是也不知道自己是怎么遍历的。\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e这也是造成了二叉树的题目“一看就会，一写就废”的原因。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e针对翻转二叉树，我给出了一种递归，三种迭代（两种模拟深度优先遍历，一种层序遍历）的写法，都是之前我们讲过的写法，融汇贯通一下而已。\u003c/strong\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e大家一定也有自己的解法，但一定要成方法论，这样才能通用，才能举一反三！\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e其他语言版本\u003c/h2\u003e\u003ca id=\"user-content-其他语言版本\" class=\"anchor\" aria-label=\"Permalink: 其他语言版本\" href=\"#其他语言版本\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eJava:\u003c/h3\u003e\u003ca id=\"user-content-java\" class=\"anchor\" aria-label=\"Permalink: Java:\" href=\"#java\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-java notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"//DFS递归\nclass Solution {\n   /**\n     * 前后序遍历都可以\n     * 中序不行，因为先左孩子交换孩子，再根交换孩子（做完后，右孩子已经变成了原来的左孩子），再右孩子交换孩子（此时其实是对原来的左孩子做交换）\n     */\n    public TreeNode invertTree(TreeNode root) {\n        if (root == null) {\n            return null;\n        }\n        invertTree(root.left);\n        invertTree(root.right);\n        swapChildren(root);\n        return root;\n    }\n\n    private void swapChildren(TreeNode root) {\n        TreeNode tmp = root.left;\n        root.left = root.right;\n        root.right = tmp;\n    }\n}\n\n//BFS\nclass Solution {\n    public TreeNode invertTree(TreeNode root) {\n        if (root == null) {return null;}\n        ArrayDeque\u0026lt;TreeNode\u0026gt; deque = new ArrayDeque\u0026lt;\u0026gt;();\n        deque.offer(root);\n        while (!deque.isEmpty()) {\n            int size = deque.size();\n            while (size-- \u0026gt; 0) {\n                TreeNode node = deque.poll();\n                swap(node);\n                if (node.left != null) deque.offer(node.left);\n                if (node.right != null) deque.offer(node.right);\n            }\n        }\n        return root;\n    }\n\n    public void swap(TreeNode root) {\n        TreeNode temp = root.left;\n        root.left = root.right;\n        root.right = temp;\n    }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e//DFS递归\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSolution\u003c/span\u003e {\n   \u003cspan class=\"pl-c\"\u003e/**\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * 前后序遍历都可以\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     * 中序不行，因为先左孩子交换孩子，再根交换孩子（做完后，右孩子已经变成了原来的左孩子），再右孩子交换孩子（此时其实是对原来的左孩子做交换）\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e     */\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e) {\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e) {\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e;\n        }\n        \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e);\n        \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e);\n        \u003cspan class=\"pl-en\"\u003eswapChildren\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e);\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e;\n    }\n\n    \u003cspan class=\"pl-k\"\u003eprivate\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eswapChildren\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e) {\n        \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etmp\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e;\n        \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e;\n        \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003etmp\u003c/span\u003e;\n    }\n}\n\n\u003cspan class=\"pl-c\"\u003e//BFS\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSolution\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e) {\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e == \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e) {\u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e;}\n        \u003cspan class=\"pl-smi\"\u003eArrayDeque\u003c/span\u003e\u0026lt;\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u0026gt; \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e = \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eArrayDeque\u003c/span\u003e\u0026lt;\u0026gt;();\n        \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eoffer\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e);\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e (!\u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eisEmpty\u003c/span\u003e()) {\n            \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003esize\u003c/span\u003e();\n            \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003esize\u003c/span\u003e-- \u0026gt; \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e) {\n                \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003epoll\u003c/span\u003e();\n                \u003cspan class=\"pl-en\"\u003eswap\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e);\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e != \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e) \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eoffer\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e);\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e != \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e) \u003cspan class=\"pl-s1\"\u003edeque\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eoffer\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e);\n            }\n        }\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e;\n    }\n\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eswap\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e) {\n        \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e;\n        \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e;\n        \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e = \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e;\n    }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePython:\u003c/h3\u003e\u003ca id=\"user-content-python\" class=\"anchor\" aria-label=\"Permalink: Python:\" href=\"#python\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e递归法：前序遍历：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Definition for a binary tree node.\n# class TreeNode:\n#     def __init__(self, val=0, left=None, right=None):\n#         self.val = val\n#         self.left = left\n#         self.right = right\nclass Solution:\n    def invertTree(self, root: TreeNode) -\u0026gt; TreeNode:\n        if not root:\n            return None\n        root.left, root.right = root.right, root.left\n        self.invertTree(root.left)\n        self.invertTree(root.right)\n        return root\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Definition for a binary tree node.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# class TreeNode:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#     def __init__(self, val=0, left=None, right=None):\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.val = val\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.left = left\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.right = right\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSolution\u003c/span\u003e:\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e:\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e:\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e)\n        \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e)\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e迭代法：前序遍历：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Definition for a binary tree node.\n# class TreeNode:\n#     def __init__(self, val=0, left=None, right=None):\n#         self.val = val\n#         self.left = left\n#         self.right = right\nclass Solution:\n    def invertTree(self, root: TreeNode) -\u0026gt; TreeNode:\n        if not root:\n            return None      \n        stack = [root]        \n        while stack:\n            node = stack.pop()   \n            node.left, node.right = node.right, node.left                   \n            if node.left:\n                stack.append(node.left)\n            if node.right:\n                stack.append(node.right)  \n        return root\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Definition for a binary tree node.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# class TreeNode:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#     def __init__(self, val=0, left=None, right=None):\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.val = val\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.left = left\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.right = right\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSolution\u003c/span\u003e:\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e:\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e:\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e      \n        \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e]        \n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e:\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e()   \n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e                   \n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e:\n                \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e)\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e:\n                \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e)  \n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e递归法：中序遍历：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Definition for a binary tree node.\n# class TreeNode:\n#     def __init__(self, val=0, left=None, right=None):\n#         self.val = val\n#         self.left = left\n#         self.right = right\nclass Solution:\n    def invertTree(self, root: TreeNode) -\u0026gt; TreeNode:\n        if not root:\n            return None\n        self.invertTree(root.left)\n        root.left, root.right = root.right, root.left\n        self.invertTree(root.left)\n        return root\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Definition for a binary tree node.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# class TreeNode:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#     def __init__(self, val=0, left=None, right=None):\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.val = val\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.left = left\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.right = right\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSolution\u003c/span\u003e:\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e:\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e:\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e)\n        \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e)\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e迭代法：中序遍历：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Definition for a binary tree node.\n# class TreeNode:\n#     def __init__(self, val=0, left=None, right=None):\n#         self.val = val\n#         self.left = left\n#         self.right = right\nclass Solution:\n    def invertTree(self, root: TreeNode) -\u0026gt; TreeNode:\n        if not root:\n            return None      \n        stack = [root]        \n        while stack:\n            node = stack.pop()                   \n            if node.left:\n                stack.append(node.left)\n            node.left, node.right = node.right, node.left               \n            if node.left:\n                stack.append(node.left)       \n        return root\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Definition for a binary tree node.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# class TreeNode:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#     def __init__(self, val=0, left=None, right=None):\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.val = val\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.left = left\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.right = right\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSolution\u003c/span\u003e:\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e:\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e:\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e      \n        \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e]        \n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e:\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e()                   \n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e:\n                \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e)\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e               \n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e:\n                \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e)       \n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e递归法：后序遍历：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Definition for a binary tree node.\n# class TreeNode:\n#     def __init__(self, val=0, left=None, right=None):\n#         self.val = val\n#         self.left = left\n#         self.right = right\nclass Solution:\n    def invertTree(self, root: TreeNode) -\u0026gt; TreeNode:\n        if not root:\n            return None\n        self.invertTree(root.left)\n        self.invertTree(root.right)\n        root.left, root.right = root.right, root.left\n        return root\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Definition for a binary tree node.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# class TreeNode:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#     def __init__(self, val=0, left=None, right=None):\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.val = val\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.left = left\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.right = right\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSolution\u003c/span\u003e:\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e:\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e:\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e)\n        \u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e)\n        \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e迭代法：后序遍历：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Definition for a binary tree node.\n# class TreeNode:\n#     def __init__(self, val=0, left=None, right=None):\n#         self.val = val\n#         self.left = left\n#         self.right = right\nclass Solution:\n    def invertTree(self, root: TreeNode) -\u0026gt; TreeNode:\n        if not root:\n            return None      \n        stack = [root]        \n        while stack:\n            node = stack.pop()                   \n            if node.left:\n                stack.append(node.left)\n            if node.right:\n                stack.append(node.right)  \n            node.left, node.right = node.right, node.left               \n     \n        return root\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Definition for a binary tree node.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# class TreeNode:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#     def __init__(self, val=0, left=None, right=None):\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.val = val\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.left = left\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.right = right\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSolution\u003c/span\u003e:\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e:\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e:\n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e      \n        \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e]        \n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e:\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epop\u003c/span\u003e()                   \n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e:\n                \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e)\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e:\n                \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e)  \n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e               \n     \n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e迭代法：广度优先遍历（层序遍历）：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Definition for a binary tree node.\n# class TreeNode:\n#     def __init__(self, val=0, left=None, right=None):\n#         self.val = val\n#         self.left = left\n#         self.right = right\nclass Solution:\n    def invertTree(self, root: TreeNode) -\u0026gt; TreeNode:\n        if not root: \n            return None\n\n        queue = collections.deque([root])    \n        while queue:\n            for i in range(len(queue)):\n                node = queue.popleft()\n                node.left, node.right = node.right, node.left\n                if node.left: queue.append(node.left)\n                if node.right: queue.append(node.right)\n        return root   \n\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Definition for a binary tree node.\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# class TreeNode:\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#     def __init__(self, val=0, left=None, right=None):\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.val = val\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.left = left\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e#         self.right = right\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSolution\u003c/span\u003e:\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eself\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e:\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \n            \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e\n\n        \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecollections\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003edeque\u003c/span\u003e([\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e])    \n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e:\n            \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e)):\n                \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epopleft\u003c/span\u003e()\n                \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e)\n                \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e)\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e   \u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eGo:\u003c/h3\u003e\u003ca id=\"user-content-go\" class=\"anchor\" aria-label=\"Permalink: Go:\" href=\"#go\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e递归版本的前序遍历\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-go notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"func invertTree(root *TreeNode) *TreeNode {\n    if root == nil {\n        return nil\n    }\n    root.Left, root.Right = root.Right, root.Left    //交换\n    \n    invertTree(root.Left)\n    invertTree(root.Right)\n\n    return root\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e {\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e\n    }\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e    \u003cspan class=\"pl-c\"\u003e//交换\u003c/span\u003e\n    \n    \u003cspan class=\"pl-s1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e)\n    \u003cspan class=\"pl-s1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e)\n\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e递归版本的后序遍历\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-go notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"func invertTree(root *TreeNode) *TreeNode {\n    if root == nil {\n        return root\n    }\n    \n    invertTree(root.Left)     //遍历左节点\n    invertTree(root.Right)    //遍历右节点\n    root.Left, root.Right = root.Right, root.Left    //交换\n    \n    return root\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e {\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\n    }\n    \n    \u003cspan class=\"pl-s1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e)     \u003cspan class=\"pl-c\"\u003e//遍历左节点\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e)    \u003cspan class=\"pl-c\"\u003e//遍历右节点\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e    \u003cspan class=\"pl-c\"\u003e//交换\u003c/span\u003e\n    \n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e迭代版本的前序遍历\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-go notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"func invertTree(root *TreeNode) *TreeNode {\n    stack := []*TreeNode{}\n    node := root\n    for node != nil || len(stack) \u0026gt; 0 {\n        for node != nil {\n            node.Left, node.Right = node.Right, node.Left    //交换\n            stack = append(stack,node)\n            node = node.Left\n        }\n        node = stack[len(stack)-1]\n        stack = stack[:len(stack)-1]\n        node = node.Right\n    }\n    \n    return root\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e {\n    \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e []\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e{}\n    \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e||\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e {\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e {\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e    \u003cspan class=\"pl-c\"\u003e//交换\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e,\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e)\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e\n        }\n        \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e)\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]\n        \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e[:\u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e)\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]\n        \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e\n    }\n    \n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e迭代版本的后序遍历\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-go notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"func invertTree(root *TreeNode) *TreeNode {\n    stack := []*TreeNode{}\n    node := root\n    var prev *TreeNode\n    for node != nil || len(stack) \u0026gt; 0 {\n        for node != nil {\n            stack = append(stack, node)\n            node = node.Left\n        }\n        node = stack[len(stack)-1]\n        stack = stack[:len(stack)-1]\n        if node.Right == nil || node.Right == prev {\n            node.Left, node.Right = node.Right, node.Left     //交换\n            prev = node\n            node = nil\n        } else {\n            stack = append(stack, node)\n            node = node.Right\n        }\n    }\n    \n    return root\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e {\n    \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e []\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e{}\n    \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eprev\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e||\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e {\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e {\n            \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e)\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e\n        }\n        \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e)\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]\n        \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e[:\u003cspan class=\"pl-s1\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e)\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e]\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e||\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eprev\u003c/span\u003e {\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e     \u003cspan class=\"pl-c\"\u003e//交换\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003eprev\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e\n        } \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e {\n            \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eappend\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e)\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e\n        }\n    }\n    \n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e层序遍历\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-go notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"func invertTree(root *TreeNode) *TreeNode {\n    if root == nil{\n        return root\n    }\n    queue := list.New()\n    node := root\n    queue.PushBack(node)\n    for queue.Len() \u0026gt; 0 {\n        length := queue.Len()\n        for i := 0; i \u0026lt; length; i++ {\n            e := queue.Remove(queue.Front()).(*TreeNode)\n            e.Left, e.Right = e.Right, e.Left    //交换\n            if e.Left != nil {\n                queue.PushBack(e.Left)\n            }\n            if e.Right != nil {\n                queue.PushBack(e.Right)\n            }\n        }\n    }\n    return root\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efunc\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e{\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\n    }\n    \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elist\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eNew\u003c/span\u003e()\n    \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ePushBack\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e)\n    \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLen\u003c/span\u003e() \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e {\n        \u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLen\u003c/span\u003e()\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e; \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e {\n            \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRemove\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eFront\u003c/span\u003e()).(\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e)\n            \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e    \u003cspan class=\"pl-c\"\u003e//交换\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e {\n                \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ePushBack\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eLeft\u003c/span\u003e)\n            }\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enil\u003c/span\u003e {\n                \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ePushBack\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eRight\u003c/span\u003e)\n            }\n        }\n    }\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eJavaScript:\u003c/h3\u003e\u003ca id=\"user-content-javascript\" class=\"anchor\" aria-label=\"Permalink: JavaScript:\" href=\"#javascript\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e使用递归版本的前序遍历\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var invertTree = function(root) {\n    // 终止条件\n    if (!root) {\n        return null;\n    }\n    // 交换左右节点\n    const rightNode = root.right;\n    root.right = invertTree(root.left);\n    root.left = invertTree(rightNode);\n    return root;\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e// 终止条件\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e// 交换左右节点\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erightNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003erightNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e使用迭代版本(统一模板))的前序遍历：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var invertTree = function(root) {\n    //我们先定义节点交换函数\n    const invertNode = function(root, left, right) {\n        let temp = left;\n        left = right;\n        right = temp;\n        root.left = left;\n        root.right = right;\n    }\n    //使用迭代方法的前序遍历 \n    let stack = [];\n    if(root === null) {\n        return root;\n    }\n    stack.push(root);\n    while(stack.length) {\n        let node = stack.pop();\n        if(node !== null) {\n            //前序遍历顺序中左右  入栈顺序是前序遍历的倒序右左中\n            node.right \u0026amp;\u0026amp; stack.push(node.right);\n            node.left \u0026amp;\u0026amp; stack.push(node.left);\n            stack.push(node);\n            stack.push(null);\n        } else {\n            node = stack.pop();\n            //节点处理逻辑\n            invertNode(node, node.left, node.right);\n        }\n    }\n    return root;\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e//我们先定义节点交换函数\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e//使用迭代方法的前序遍历 \u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e===\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-c\"\u003e//前序遍历顺序中左右  入栈顺序是前序遍历的倒序右左中\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-c\"\u003e//节点处理逻辑\u003c/span\u003e\n            \u003cspan class=\"pl-en\"\u003einvertNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e使用层序遍历：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var invertTree = function(root) {\n    //我们先定义节点交换函数\n    const invertNode = function(root, left, right) {\n        let temp = left;\n        left = right;\n        right = temp;\n        root.left = left;\n        root.right = right;\n    }\n    //使用层序遍历\n    let queue = [];\n    if(root === null) {\n        return root;\n    } \n    queue.push(root);\n    while(queue.length) {\n        let length = queue.length;\n        while(length--) {\n            let node = queue.shift();\n            //节点处理逻辑\n            invertNode(node, node.left, node.right);\n            node.left \u0026amp;\u0026amp; queue.push(node.left);\n            node.right \u0026amp;\u0026amp; queue.push(node.right);\n        }\n    }\n    return root;\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e//我们先定义节点交换函数\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e//使用层序遍历\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e===\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \n    \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e--\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eshift\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-c\"\u003e//节点处理逻辑\u003c/span\u003e\n            \u003cspan class=\"pl-en\"\u003einvertNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eTypeScript：\u003c/h3\u003e\u003ca id=\"user-content-typescript\" class=\"anchor\" aria-label=\"Permalink: TypeScript：\" href=\"#typescript\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e递归法：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ts notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"// 递归法（前序遍历）\nfunction invertTree(root: TreeNode | null): TreeNode | null {\n    if (root === null) return root;\n    let tempNode: TreeNode | null = root.left;\n    root.left = root.right;\n    root.right = tempNode;\n    invertTree(root.left);\n    invertTree(root.right);\n    return root;\n};\n\n// 递归法（后序遍历）\nfunction invertTree(root: TreeNode | null): TreeNode | null {\n    if (root === null) return root;\n    invertTree(root.left);\n    invertTree(root.right);\n    let tempNode: TreeNode | null = root.left;\n    root.left = root.right;\n    root.right = tempNode;\n    return root;\n};\n\n// 递归法（中序遍历）\nfunction invertTree(root: TreeNode | null): TreeNode | null {\n    if (root === null) return root;\n    invertTree(root.left);\n    let tempNode: TreeNode | null = root.left;\n    root.left = root.right;\n    root.right = tempNode;\n    // 因为左右节点已经进行交换，此时的root.left 是原先的root.right\n    invertTree(root.left);\n    return root;\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e// 递归法（前序遍历）\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e===\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e// 递归法（后序遍历）\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e===\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e// 递归法（中序遍历）\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e===\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e// 因为左右节点已经进行交换，此时的root.left 是原先的root.right\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e迭代法：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-ts notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"// 迭代法（栈模拟前序遍历）\nfunction invertTree(root: TreeNode | null): TreeNode | null {\n    let helperStack: TreeNode[] = [];\n    let curNode: TreeNode,\n        tempNode: TreeNode | null;\n    if (root !== null) helperStack.push(root);\n    while (helperStack.length \u0026gt; 0) {\n        curNode = helperStack.pop()!;\n        // 入栈操作最好在交换节点之前进行，便于理解\n        if (curNode.right) helperStack.push(curNode.right);\n        if (curNode.left) helperStack.push(curNode.left);\n        tempNode = curNode.left;\n        curNode.left = curNode.right;\n        curNode.right = tempNode;\n    }\n    return root;\n};\n\n// 迭代法（栈模拟中序遍历-统一写法形式）\nfunction invertTree(root: TreeNode | null): TreeNode | null {\n    let helperStack: (TreeNode | null)[] = [];\n    let curNode: TreeNode | null,\n        tempNode: TreeNode | null;\n    if (root !== null) helperStack.push(root);\n    while (helperStack.length \u0026gt; 0) {\n        curNode = helperStack.pop();\n        if (curNode !== null) {\n            if (curNode.right !== null) helperStack.push(curNode.right);\n            helperStack.push(curNode);\n            helperStack.push(null);\n            if (curNode.left !== null) helperStack.push(curNode.left);\n        } else {\n            curNode = helperStack.pop()!;\n            tempNode = curNode.left;\n            curNode.left = curNode.right;\n            curNode.right = tempNode;\n        }\n    }\n    return root;\n};\n\n// 迭代法（栈模拟后序遍历-统一写法形式）\nfunction invertTree(root: TreeNode | null): TreeNode | null {\n    let helperStack: (TreeNode | null)[] = [];\n    let curNode: TreeNode | null,\n        tempNode: TreeNode | null;\n    if (root !== null) helperStack.push(root);\n    while (helperStack.length \u0026gt; 0) {\n        curNode = helperStack.pop();\n        if (curNode !== null) {\n            helperStack.push(curNode);\n            helperStack.push(null);\n            if (curNode.right !== null) helperStack.push(curNode.right);\n            if (curNode.left !== null) helperStack.push(curNode.left);\n        } else {\n            curNode = helperStack.pop()!;\n            tempNode = curNode.left;\n            curNode.left = curNode.right;\n            curNode.right = tempNode;\n        }\n    }\n    return root;\n};\n\n// 迭代法（队列模拟层序遍历）\nfunction invertTree(root: TreeNode | null): TreeNode | null {\n    const helperQueue: TreeNode[] = [];\n    let curNode: TreeNode,\n        tempNode: TreeNode | null;\n    if (root !== null) helperQueue.push(root);\n    while (helperQueue.length \u0026gt; 0) {\n        for (let i = 0, length = helperQueue.length; i \u0026lt; length; i++) {\n            curNode = helperQueue.shift()!;\n            tempNode = curNode.left;\n            curNode.left = curNode.right;\n            curNode.right = tempNode;\n            if (curNode.left !== null) helperQueue.push(curNode.left);\n            if (curNode.right !== null) helperQueue.push(curNode.right);\n        }\n    }\n    return root;\n};\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e// 迭代法（栈模拟前序遍历）\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e// 入栈操作最好在交换节点之前进行，便于理解\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e// 迭代法（栈模拟中序遍历-统一写法形式）\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e// 迭代法（栈模拟后序遍历-统一写法形式）\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperStack\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e// 迭代法（队列模拟层序遍历）\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efunction\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003elength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eshift\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e!==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelperQueue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecurNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC:\u003c/h3\u003e\u003ca id=\"user-content-c\" class=\"anchor\" aria-label=\"Permalink: C:\" href=\"#c\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e递归法\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"struct TreeNode* invertTree(struct TreeNode* root){\n    if(!root)\n        return NULL;\n    //交换结点的左右孩子（中）\n    struct TreeNode* temp = root-\u0026gt;right;\n    root-\u0026gt;right = root-\u0026gt;left;\n    root-\u0026gt;left = temp;\n    左\n    invertTree(root-\u0026gt;left);\n    //右\n    invertTree(root-\u0026gt;right);\n    return root;\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e){\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e(!\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e)\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e;\n    \u003cspan class=\"pl-c\"\u003e//交换结点的左右孩子（中）\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e;\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e;\n    \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e;\n    \u003cspan class=\"pl-smi\"\u003e左\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e);\n    \u003cspan class=\"pl-c\"\u003e//右\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e);\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e;\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e迭代法：深度优先遍历\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-c notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"struct TreeNode* invertTree(struct TreeNode* root){\n    if(!root)\n        return NULL;\n    //存储结点的栈\n    struct TreeNode** stack = (struct TreeNode**)malloc(sizeof(struct TreeNode*) * 100);\n    int stackTop = 0;\n    //将根节点入栈\n    stack[stackTop++] = root;\n    //若栈中还有元素（进行循环）\n    while(stackTop) {\n        //取出栈顶元素\n        struct TreeNode* temp = stack[--stackTop];\n        //交换结点的左右孩子\n        struct TreeNode* tempNode = temp-\u0026gt;right;\n        temp-\u0026gt;right = temp-\u0026gt;left;\n        temp-\u0026gt;left = tempNode;\n        //若当前结点有左右孩子，将其入栈\n        if(temp-\u0026gt;right)\n            stack[stackTop++] = temp-\u0026gt;right;\n        if(temp-\u0026gt;left)\n            stack[stackTop++] = temp-\u0026gt;left;\n    }\n    return root;\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e){\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e(!\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e)\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNULL\u003c/span\u003e;\n    \u003cspan class=\"pl-c\"\u003e//存储结点的栈\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e)\u003cspan class=\"pl-en\"\u003emalloc\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003esizeof\u003c/span\u003e(\u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e);\n    \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estackTop\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e;\n    \u003cspan class=\"pl-c\"\u003e//将根节点入栈\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003estackTop\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e;\n    \u003cspan class=\"pl-c\"\u003e//若栈中还有元素（进行循环）\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003estackTop\u003c/span\u003e) {\n        \u003cspan class=\"pl-c\"\u003e//取出栈顶元素\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e--\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003estackTop\u003c/span\u003e];\n        \u003cspan class=\"pl-c\"\u003e//交换结点的左右孩子\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003estruct\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e;\n        \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e;\n        \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etempNode\u003c/span\u003e;\n        \u003cspan class=\"pl-c\"\u003e//若当前结点有左右孩子，将其入栈\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e)\n            \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003estackTop\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e;\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e)\n            \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003estackTop\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e++\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e;\n    }\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e;\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSwift：\u003c/h3\u003e\u003ca id=\"user-content-swift\" class=\"anchor\" aria-label=\"Permalink: Swift：\" href=\"#swift\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-swift notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"// 前序遍历-递归\nfunc invertTree(_ root: TreeNode?) -\u0026gt; TreeNode? {\n    guard let root = root else {\n        return root\n    }\n    let tmp = root.left\n    root.left = root.right\n    root.right = tmp\n    let _ = invertTree(root.left)\n    let _ = invertTree(root.right)\n    return root\n}\n\n// 层序遍历-迭代\nfunc invertTree1(_ root: TreeNode?) -\u0026gt; TreeNode? {\n    guard let root = root else {\n        return nil\n    }\n    var queue = [TreeNode]()\n    queue.append(root)\n    while !queue.isEmpty {\n        let node = queue.removeFirst()\n        let tmp = node.left\n        node.left = node.right\n        node.right = tmp\n        if let left = node.left {\n            queue.append(left)\n        }\n        if let right = node.right {\n            queue.append(right)\n        }\n    }\n    return root\n}\"\u003e\u003cpre\u003e// 前序遍历-递归\n\u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e invertTree\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e_ root\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eguard\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e root \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e root \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etmp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e root\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft\n    root\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e root\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright\n    root\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e tmp\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e _ \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eroot\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e _ \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eroot\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n// 层序遍历-迭代\n\u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e invertTree1\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e_ root\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eguard\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e root \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e root \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003enil\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eTreeNode\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eroot\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e !queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eisEmpty \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eremoveFirst\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etmp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft\n        node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright\n        node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e tmp\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e left \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eleft\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e right \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eright\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e深度优先递归。\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-swift notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"func invertTree(_ root: TreeNode?) -\u0026gt; TreeNode? {\n    guard let node = root else { return root }\n    swap(\u0026amp;node.left, \u0026amp;node.right)\n    _ = invertTree(node.left)\n    _ = invertTree(node.right)\n    return root\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e invertTree\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e_ root\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eguard\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e node \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e root \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-en\"\u003eswap\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026amp;\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    _ \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    _ \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e深度优先迭代，子结点顺序不重要，从根结点出发深度遍历即可。\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-swift notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"func invertTree(_ root: TreeNode?) -\u0026gt; TreeNode? {\n    guard let node = root else { return root }\n    var stack = [node]\n    while !stack.isEmpty {\n        guard let node = stack.popLast() else { break }\n        swap(\u0026amp;node.left, \u0026amp;node.right)\n        if let node = node.left { stack.append(node) }\n        if let node = node.right { stack.append(node) }\n    }\n    return root\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e invertTree\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e_ root\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eguard\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e node \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e root \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estack\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e !stack\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eisEmpty \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eguard\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e node \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e stack\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epopLast\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ebreak\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-en\"\u003eswap\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026amp;\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e node \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e stack\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e node \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e stack\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e广度优先迭代。\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-swift notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"func invertTree(_ root: TreeNode?) -\u0026gt; TreeNode? {\n    guard let node = root else { return root }\n    var queue = [node]\n    while !queue.isEmpty {\n        let count = queue.count\n        for _ in 0 ..\u0026lt; count {\n            let node = queue.removeFirst()\n            swap(\u0026amp;node.left, \u0026amp;node.right)\n            if let node = node.left { queue.append(node) }\n            if let node = node.right { queue.append(node) }\n        }\n    }\n    return root\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003efunc\u003c/span\u003e invertTree\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e_ root\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eguard\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e node \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e root \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e !queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eisEmpty \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003ecount\n        \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e_\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e..\u0026lt;\u003c/span\u003e count \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eremoveFirst\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n            \u003cspan class=\"pl-en\"\u003eswap\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026amp;\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026amp;\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e node \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eleft \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e node \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eright \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e queue\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eappend\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e深度优先遍历（前序遍历）:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-scala notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"object Solution {\n  def invertTree(root: TreeNode): TreeNode = {\n    if (root == null) return root\n    // 递归\n    def process(node: TreeNode): Unit = {\n      if (node == null) return\n      // 翻转节点\n      val curNode = node.left\n      node.left = node.right\n      node.right = curNode\n      process(node.left)\n      process(node.right)\n    }\n    process(root)\n    root\n  }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eobject\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n  \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-v\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003eTreeNode\u003c/span\u003e)\u003cspan class=\"pl-k\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (root \u003cspan class=\"pl-k\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root\n    \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 递归\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eprocess\u003c/span\u003e(\u003cspan class=\"pl-v\"\u003enode\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003eTreeNode\u003c/span\u003e)\u003cspan class=\"pl-k\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eUnit\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e {\n      \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (node \u003cspan class=\"pl-k\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e\n      \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 翻转节点\u003c/span\u003e\n      \u003cspan class=\"pl-k\"\u003eval\u003c/span\u003e \u003cspan class=\"pl-v\"\u003ecurNode\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e node.left\n      node.left \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e node.right\n      node.right \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e curNode\n      process(node.left)\n      process(node.right)\n    }\n    process(root)\n    root\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e广度优先遍历（层序遍历）:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-scala notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"object Solution {\n  import scala.collection.mutable\n  def invertTree(root: TreeNode): TreeNode = {\n    if (root == null) return root\n    val queue = mutable.Queue[TreeNode]()\n    queue.enqueue(root)\n    while (!queue.isEmpty) {\n      val len = queue.size\n      for (i \u0026lt;- 0 until len) {\n        var curNode = queue.dequeue()\n        if (curNode.left != null) queue.enqueue(curNode.left)\n        if (curNode.right != null) queue.enqueue(curNode.right)\n        // 翻转\n        var tmpNode = curNode.left\n        curNode.left = curNode.right\n        curNode.right = tmpNode\n      }\n    }\n    root\n  }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eobject\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSolution\u003c/span\u003e {\n  \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-en\"\u003escala\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003ecollection\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003emutable\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvertTree\u003c/span\u003e(\u003cspan class=\"pl-v\"\u003eroot\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003eTreeNode\u003c/span\u003e)\u003cspan class=\"pl-k\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e {\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (root \u003cspan class=\"pl-k\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e root\n    \u003cspan class=\"pl-k\"\u003eval\u003c/span\u003e \u003cspan class=\"pl-v\"\u003equeue\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e mutable.\u003cspan class=\"pl-en\"\u003eQueue\u003c/span\u003e[\u003cspan class=\"pl-en\"\u003eTreeNode\u003c/span\u003e]()\n    queue.enqueue(root)\n    \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e (\u003cspan class=\"pl-k\"\u003e!\u003c/span\u003equeue.isEmpty) {\n      \u003cspan class=\"pl-k\"\u003eval\u003c/span\u003e \u003cspan class=\"pl-v\"\u003elen\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e queue.size\n      \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e (i \u003cspan class=\"pl-k\"\u003e\u0026lt;-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e until len) {\n        \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-v\"\u003ecurNode\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e queue.dequeue()\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (curNode.left \u003cspan class=\"pl-k\"\u003e!=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e) queue.enqueue(curNode.left)\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e (curNode.right \u003cspan class=\"pl-k\"\u003e!=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e) queue.enqueue(curNode.right)\n        \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e//\u003c/span\u003e 翻转\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-v\"\u003etmpNode\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e curNode.left\n        curNode.left \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e curNode.right\n        curNode.right \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e tmpNode\n      }\n    }\n    root\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRust:\u003c/h3\u003e\u003ca id=\"user-content-rust\" class=\"anchor\" aria-label=\"Permalink: Rust:\" href=\"#rust\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-rust notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"impl Solution {\n    //* 递归 */\n    pub fn invert_tree(root: Option\u0026lt;Rc\u0026lt;RefCell\u0026lt;TreeNode\u0026gt;\u0026gt;\u0026gt;) -\u0026gt; Option\u0026lt;Rc\u0026lt;RefCell\u0026lt;TreeNode\u0026gt;\u0026gt;\u0026gt; {\n        if let Some(node) = root.as_ref() {\n            let (left, right) = (node.borrow().left.clone(), node.borrow().right.clone());\n            node.borrow_mut().left = Self::invert_tree(right);\n            node.borrow_mut().right = Self::invert_tree(left);\n        }\n        root\n    }\n    //* 迭代 */\n    pub fn invert_tree(root: Option\u0026lt;Rc\u0026lt;RefCell\u0026lt;TreeNode\u0026gt;\u0026gt;\u0026gt;) -\u0026gt; Option\u0026lt;Rc\u0026lt;RefCell\u0026lt;TreeNode\u0026gt;\u0026gt;\u0026gt; {\n        let mut stack = vec![root.clone()];\n        while !stack.is_empty() {\n            if let Some(node) = stack.pop().unwrap() {\n                let (left, right) = (node.borrow().left.clone(), node.borrow().right.clone());\n                stack.push(right.clone());\n                stack.push(left.clone());\n                node.borrow_mut().left = right;\n                node.borrow_mut().right = left;\n            }\n        }\n        root\n    }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimpl\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSolution\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e//* 递归 */\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epub\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efn\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvert_tree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eOption\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRefCell\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e -\u0026gt; \u003cspan class=\"pl-smi\"\u003eOption\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRefCell\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSome\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e = root\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eas_ref\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eleft\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e right\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e = \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eborrow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eclone\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eborrow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eclone\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eborrow_mut\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e = \u003cspan class=\"pl-smi\"\u003eSelf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e::\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einvert_tree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eright\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eborrow_mut\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e = \u003cspan class=\"pl-smi\"\u003eSelf\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e::\u003c/span\u003e\u003cspan class=\"pl-en\"\u003einvert_tree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eleft\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        root\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e//* 迭代 */\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epub\u003c/span\u003e \u003cspan class=\"pl-k\"\u003efn\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einvert_tree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eOption\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRefCell\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e -\u0026gt; \u003cspan class=\"pl-smi\"\u003eOption\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRc\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRefCell\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-k\"\u003emut\u003c/span\u003e stack = \u003cspan class=\"pl-en\"\u003evec\u003c/span\u003e\u003cspan class=\"pl-en\"\u003e!\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003eroot\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003eclone\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e !stack\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eis_empty\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eSome\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e = stack\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epop\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eunwrap\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-k\"\u003elet\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eleft\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e right\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e = \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003enode\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eborrow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eclone\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eborrow\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eclone\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n                stack\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eright\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eclone\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n                stack\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003epush\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eleft\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eclone\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n                node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eborrow_mut\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eleft\u003c/span\u003e = right\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n                node\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eborrow_mut\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eright\u003c/span\u003e = left\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        root\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC#:\u003c/h3\u003e\u003ca id=\"user-content-c-1\" class=\"anchor\" aria-label=\"Permalink: C#:\" href=\"#c-1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"//递归\npublic class Solution {\n    public TreeNode InvertTree(TreeNode root) {\n    if (root == null) return root;\n    \n    swap(root);\n    InvertTree(root.left);\n    InvertTree(root.right);\n    return root;\n    }\n   \n    public void swap(TreeNode node) {\n        TreeNode temp = node.left;\n        node.left = node.right;\n        node.right = temp;\n    }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e//递归\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSolution\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eInvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \n    \u003cspan class=\"pl-s1\"\u003eswap\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eInvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eInvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n   \n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003evoid\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eswap\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003enode\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etemp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"//迭代\npublic class Solution {\npublic TreeNode InvertTree(TreeNode root) {\n    if(root == null) return root;\n    (root.left,root.right) = (root.right, root.left);\n    InvertTree(root.left);\n    InvertTree(root.right);\n    return root;\n}\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e//迭代\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSolution\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eInvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTreeNode\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eInvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eleft\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eInvertTree\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eright\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eroot\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp align=\"center\" dir=\"auto\"\u003e\n\u003ca href=\"https://programmercarl.com/other/kstar.html\" rel=\"nofollow\"\u003e\n  \u003cimg src=\"/feinan/leetcode-master/raw/master/pics/网站星球宣传海报.jpg\" width=\"1000\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\u003c/article\u003e","richTextTruncated":false,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"226.翻转二叉树","fully_qualified_name":"226.翻转二叉树","kind":"section_1","ident_start":344,"ident_end":363,"extent_start":342,"extent_end":29939,"ident_utf16":{"start":{"line_number":7,"utf16_col":2},"end":{"line_number":7,"utf16_col":11}},"extent_utf16":{"start":{"line_number":7,"utf16_col":0},"end":{"line_number":1035,"utf16_col":0}}},{"name":"算法公开课","fully_qualified_name":"算法公开课","kind":"section_2","ident_start":792,"ident_end":807,"extent_start":789,"extent_end":1141,"ident_utf16":{"start":{"line_number":18,"utf16_col":3},"end":{"line_number":18,"utf16_col":8}},"extent_utf16":{"start":{"line_number":18,"utf16_col":0},"end":{"line_number":22,"utf16_col":0}}},{"name":"题外话","fully_qualified_name":"题外话","kind":"section_2","ident_start":1144,"ident_end":1153,"extent_start":1141,"extent_end":1467,"ident_utf16":{"start":{"line_number":22,"utf16_col":3},"end":{"line_number":22,"utf16_col":6}},"extent_utf16":{"start":{"line_number":22,"utf16_col":0},"end":{"line_number":30,"utf16_col":0}}},{"name":"思路","fully_qualified_name":"思路","kind":"section_2","ident_start":1470,"ident_end":1476,"extent_start":1467,"extent_end":7278,"ident_utf16":{"start":{"line_number":30,"utf16_col":3},"end":{"line_number":30,"utf16_col":5}},"extent_utf16":{"start":{"line_number":30,"utf16_col":0},"end":{"line_number":193,"utf16_col":0}}},{"name":"递归法","fully_qualified_name":"递归法","kind":"section_3","ident_start":2632,"ident_end":2641,"extent_start":2628,"extent_end":4216,"ident_utf16":{"start":{"line_number":53,"utf16_col":4},"end":{"line_number":53,"utf16_col":7}},"extent_utf16":{"start":{"line_number":53,"utf16_col":0},"end":{"line_number":106,"utf16_col":0}}},{"name":"迭代法","fully_qualified_name":"迭代法","kind":"section_3","ident_start":4220,"ident_end":4229,"extent_start":4216,"extent_end":7278,"ident_utf16":{"start":{"line_number":106,"utf16_col":4},"end":{"line_number":106,"utf16_col":7}},"extent_utf16":{"start":{"line_number":106,"utf16_col":0},"end":{"line_number":193,"utf16_col":0}}},{"name":"深度优先遍历","fully_qualified_name":"深度优先遍历","kind":"section_4","ident_start":4236,"ident_end":4254,"extent_start":4231,"extent_end":6340,"ident_utf16":{"start":{"line_number":108,"utf16_col":5},"end":{"line_number":108,"utf16_col":11}},"extent_utf16":{"start":{"line_number":108,"utf16_col":0},"end":{"line_number":167,"utf16_col":0}}},{"name":"广度优先遍历","fully_qualified_name":"广度优先遍历","kind":"section_4","ident_start":6345,"ident_end":6363,"extent_start":6340,"extent_end":7278,"ident_utf16":{"start":{"line_number":167,"utf16_col":5},"end":{"line_number":167,"utf16_col":11}},"extent_utf16":{"start":{"line_number":167,"utf16_col":0},"end":{"line_number":193,"utf16_col":0}}},{"name":"拓展","fully_qualified_name":"拓展","kind":"section_2","ident_start":7281,"ident_end":7287,"extent_start":7278,"extent_end":9015,"ident_utf16":{"start":{"line_number":193,"utf16_col":3},"end":{"line_number":193,"utf16_col":5}},"extent_utf16":{"start":{"line_number":193,"utf16_col":0},"end":{"line_number":248,"utf16_col":0}}},{"name":"总结","fully_qualified_name":"总结","kind":"section_2","ident_start":9018,"ident_end":9024,"extent_start":9015,"extent_end":9671,"ident_utf16":{"start":{"line_number":248,"utf16_col":3},"end":{"line_number":248,"utf16_col":5}},"extent_utf16":{"start":{"line_number":248,"utf16_col":0},"end":{"line_number":260,"utf16_col":0}}},{"name":"其他语言版本","fully_qualified_name":"其他语言版本","kind":"section_2","ident_start":9674,"ident_end":9692,"extent_start":9671,"extent_end":29939,"ident_utf16":{"start":{"line_number":260,"utf16_col":3},"end":{"line_number":260,"utf16_col":9}},"extent_utf16":{"start":{"line_number":260,"utf16_col":0},"end":{"line_number":1035,"utf16_col":0}}},{"name":"Java:","fully_qualified_name":"Java:","kind":"section_3","ident_start":9699,"ident_end":9704,"extent_start":9695,"extent_end":11079,"ident_utf16":{"start":{"line_number":263,"utf16_col":4},"end":{"line_number":263,"utf16_col":9}},"extent_utf16":{"start":{"line_number":263,"utf16_col":0},"end":{"line_number":314,"utf16_col":0}}},{"name":"Python:","fully_qualified_name":"Python:","kind":"section_3","ident_start":11083,"ident_end":11090,"extent_start":11079,"extent_end":15358,"ident_utf16":{"start":{"line_number":314,"utf16_col":4},"end":{"line_number":314,"utf16_col":11}},"extent_utf16":{"start":{"line_number":314,"utf16_col":0},"end":{"line_number":470,"utf16_col":0}}},{"name":"Go:","fully_qualified_name":"Go:","kind":"section_3","ident_start":15362,"ident_end":15365,"extent_start":15358,"extent_end":17680,"ident_utf16":{"start":{"line_number":470,"utf16_col":4},"end":{"line_number":470,"utf16_col":7}},"extent_utf16":{"start":{"line_number":470,"utf16_col":0},"end":{"line_number":579,"utf16_col":0}}},{"name":"JavaScript:","fully_qualified_name":"JavaScript:","kind":"section_3","ident_start":17684,"ident_end":17695,"extent_start":17680,"extent_end":19731,"ident_utf16":{"start":{"line_number":579,"utf16_col":4},"end":{"line_number":579,"utf16_col":15}},"extent_utf16":{"start":{"line_number":579,"utf16_col":0},"end":{"line_number":660,"utf16_col":0}}},{"name":"TypeScript：","fully_qualified_name":"TypeScript：","kind":"section_3","ident_start":19735,"ident_end":19748,"extent_start":19731,"extent_end":23817,"ident_utf16":{"start":{"line_number":660,"utf16_col":4},"end":{"line_number":660,"utf16_col":15}},"extent_utf16":{"start":{"line_number":660,"utf16_col":0},"end":{"line_number":787,"utf16_col":0}}},{"name":"C:","fully_qualified_name":"C:","kind":"section_3","ident_start":23821,"ident_end":23823,"extent_start":23817,"extent_end":24999,"ident_utf16":{"start":{"line_number":787,"utf16_col":4},"end":{"line_number":787,"utf16_col":6}},"extent_utf16":{"start":{"line_number":787,"utf16_col":0},"end":{"line_number":834,"utf16_col":0}}},{"name":"Swift：","fully_qualified_name":"Swift：","kind":"section_3","ident_start":25003,"ident_end":25011,"extent_start":24999,"extent_end":28129,"ident_utf16":{"start":{"line_number":834,"utf16_col":4},"end":{"line_number":834,"utf16_col":10}},"extent_utf16":{"start":{"line_number":834,"utf16_col":0},"end":{"line_number":965,"utf16_col":0}}},{"name":"Rust:","fully_qualified_name":"Rust:","kind":"section_3","ident_start":28133,"ident_end":28138,"extent_start":28129,"extent_end":29139,"ident_utf16":{"start":{"line_number":965,"utf16_col":4},"end":{"line_number":965,"utf16_col":9}},"extent_utf16":{"start":{"line_number":965,"utf16_col":0},"end":{"line_number":995,"utf16_col":0}}},{"name":"C#:","fully_qualified_name":"C#:","kind":"section_3","ident_start":29143,"ident_end":29146,"extent_start":29139,"extent_end":29939,"ident_utf16":{"start":{"line_number":995,"utf16_col":4},"end":{"line_number":995,"utf16_col":7}},"extent_utf16":{"start":{"line_number":995,"utf16_col":0},"end":{"line_number":1035,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":793905675,"defaultBranch":"master","name":"leetcode-master","ownerLogin":"feinan","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2024-04-30T05:06:31.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1912535?v=4","public":true,"private":false,"isOrgOwned":false,"isArchived":false},"currentUser":null,"uploadToken":"2jJ4ciA5Bdxduwp3Is21rQy2DPd2tpBIL6y-EiNhe578ka3H8paPAEO_P6Ct7eYMXCt0HMuRjoCLDV8xal86Xg","allShortcutsEnabled":false,"treeExpanded":true,"path":"problems/0226.翻转二叉树.md","symbolsExpanded":false,"refInfo":{"name":"master","listCacheKey":"v0:1714453598.065801","canEdit":false,"currentOid":"b07e850a199dae1777d8831e9e811d87725396b4"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"problems":{"items":[{"name":"kamacoder","path":"problems/kamacoder","contentType":"directory"},{"name":"qita","path":"problems/qita","contentType":"directory"},{"name":"前序","path":"problems/前序","contentType":"directory"},{"name":"周总结","path":"problems/周总结","contentType":"directory"},{"name":"0001.两数之和.md","path":"problems/0001.两数之和.md","contentType":"file"},{"name":"0005.最长回文子串.md","path":"problems/0005.最长回文子串.md","contentType":"file"},{"name":"0015.三数之和.md","path":"problems/0015.三数之和.md","contentType":"file"},{"name":"0017.电话号码的字母组合.md","path":"problems/0017.电话号码的字母组合.md","contentType":"file"},{"name":"0018.四数之和.md","path":"problems/0018.四数之和.md","contentType":"file"},{"name":"0019.删除链表的倒数第N个节点.md","path":"problems/0019.删除链表的倒数第N个节点.md","contentType":"file"},{"name":"0020.有效的括号.md","path":"problems/0020.有效的括号.md","contentType":"file"},{"name":"0024.两两交换链表中的节点.md","path":"problems/0024.两两交换链表中的节点.md","contentType":"file"},{"name":"0027.移除元素.md","path":"problems/0027.移除元素.md","contentType":"file"},{"name":"0028.实现strStr.md","path":"problems/0028.实现strStr.md","contentType":"file"},{"name":"0031.下一个排列.md","path":"problems/0031.下一个排列.md","contentType":"file"},{"name":"0034.在排序数组中查找元素的第一个和最后一个位置.md","path":"problems/0034.在排序数组中查找元素的第一个和最后一个位置.md","contentType":"file"},{"name":"0035.搜索插入位置.md","path":"problems/0035.搜索插入位置.md","contentType":"file"},{"name":"0037.解数独.md","path":"problems/0037.解数独.md","contentType":"file"},{"name":"0039.组合总和.md","path":"problems/0039.组合总和.md","contentType":"file"},{"name":"0040.组合总和II.md","path":"problems/0040.组合总和II.md","contentType":"file"},{"name":"0042.接雨水.md","path":"problems/0042.接雨水.md","contentType":"file"},{"name":"0045.跳跃游戏II.md","path":"problems/0045.跳跃游戏II.md","contentType":"file"},{"name":"0046.全排列.md","path":"problems/0046.全排列.md","contentType":"file"},{"name":"0047.全排列II.md","path":"problems/0047.全排列II.md","contentType":"file"},{"name":"0051.N皇后.md","path":"problems/0051.N皇后.md","contentType":"file"},{"name":"0052.N皇后II.md","path":"problems/0052.N皇后II.md","contentType":"file"},{"name":"0053.最大子序和.md","path":"problems/0053.最大子序和.md","contentType":"file"},{"name":"0053.最大子序和（动态规划）.md","path":"problems/0053.最大子序和（动态规划）.md","contentType":"file"},{"name":"0054.螺旋矩阵.md","path":"problems/0054.螺旋矩阵.md","contentType":"file"},{"name":"0055.跳跃游戏.md","path":"problems/0055.跳跃游戏.md","contentType":"file"},{"name":"0056.合并区间.md","path":"problems/0056.合并区间.md","contentType":"file"},{"name":"0059.螺旋矩阵II.md","path":"problems/0059.螺旋矩阵II.md","contentType":"file"},{"name":"0062.不同路径.md","path":"problems/0062.不同路径.md","contentType":"file"},{"name":"0063.不同路径II.md","path":"problems/0063.不同路径II.md","contentType":"file"},{"name":"0070.爬楼梯.md","path":"problems/0070.爬楼梯.md","contentType":"file"},{"name":"0070.爬楼梯完全背包版本.md","path":"problems/0070.爬楼梯完全背包版本.md","contentType":"file"},{"name":"0072.编辑距离.md","path":"problems/0072.编辑距离.md","contentType":"file"},{"name":"0077.组合.md","path":"problems/0077.组合.md","contentType":"file"},{"name":"0077.组合优化.md","path":"problems/0077.组合优化.md","contentType":"file"},{"name":"0078.子集.md","path":"problems/0078.子集.md","contentType":"file"},{"name":"0084.柱状图中最大的矩形.md","path":"problems/0084.柱状图中最大的矩形.md","contentType":"file"},{"name":"0090.子集II.md","path":"problems/0090.子集II.md","contentType":"file"},{"name":"0093.复原IP地址.md","path":"problems/0093.复原IP地址.md","contentType":"file"},{"name":"0096.不同的二叉搜索树.md","path":"problems/0096.不同的二叉搜索树.md","contentType":"file"},{"name":"0098.验证二叉搜索树.md","path":"problems/0098.验证二叉搜索树.md","contentType":"file"},{"name":"0100.相同的树.md","path":"problems/0100.相同的树.md","contentType":"file"},{"name":"0101.对称二叉树.md","path":"problems/0101.对称二叉树.md","contentType":"file"},{"name":"0102.二叉树的层序遍历.md","path":"problems/0102.二叉树的层序遍历.md","contentType":"file"},{"name":"0104.二叉树的最大深度.md","path":"problems/0104.二叉树的最大深度.md","contentType":"file"},{"name":"0106.从中序与后序遍历序列构造二叉树.md","path":"problems/0106.从中序与后序遍历序列构造二叉树.md","contentType":"file"},{"name":"0108.将有序数组转换为二叉搜索树.md","path":"problems/0108.将有序数组转换为二叉搜索树.md","contentType":"file"},{"name":"0110.平衡二叉树.md","path":"problems/0110.平衡二叉树.md","contentType":"file"},{"name":"0111.二叉树的最小深度.md","path":"problems/0111.二叉树的最小深度.md","contentType":"file"},{"name":"0112.路径总和.md","path":"problems/0112.路径总和.md","contentType":"file"},{"name":"0115.不同的子序列.md","path":"problems/0115.不同的子序列.md","contentType":"file"},{"name":"0116.填充每个节点的下一个右侧节点指针.md","path":"problems/0116.填充每个节点的下一个右侧节点指针.md","contentType":"file"},{"name":"0121.买卖股票的最佳时机.md","path":"problems/0121.买卖股票的最佳时机.md","contentType":"file"},{"name":"0122.买卖股票的最佳时机II.md","path":"problems/0122.买卖股票的最佳时机II.md","contentType":"file"},{"name":"0122.买卖股票的最佳时机II（动态规划）.md","path":"problems/0122.买卖股票的最佳时机II（动态规划）.md","contentType":"file"},{"name":"0123.买卖股票的最佳时机III.md","path":"problems/0123.买卖股票的最佳时机III.md","contentType":"file"},{"name":"0127.单词接龙.md","path":"problems/0127.单词接龙.md","contentType":"file"},{"name":"0129.求根到叶子节点数字之和.md","path":"problems/0129.求根到叶子节点数字之和.md","contentType":"file"},{"name":"0130.被围绕的区域.md","path":"problems/0130.被围绕的区域.md","contentType":"file"},{"name":"0131.分割回文串.md","path":"problems/0131.分割回文串.md","contentType":"file"},{"name":"0132.分割回文串II.md","path":"problems/0132.分割回文串II.md","contentType":"file"},{"name":"0134.加油站.md","path":"problems/0134.加油站.md","contentType":"file"},{"name":"0135.分发糖果.md","path":"problems/0135.分发糖果.md","contentType":"file"},{"name":"0139.单词拆分.md","path":"problems/0139.单词拆分.md","contentType":"file"},{"name":"0141.环形链表.md","path":"problems/0141.环形链表.md","contentType":"file"},{"name":"0142.环形链表II.md","path":"problems/0142.环形链表II.md","contentType":"file"},{"name":"0143.重排链表.md","path":"problems/0143.重排链表.md","contentType":"file"},{"name":"0150.逆波兰表达式求值.md","path":"problems/0150.逆波兰表达式求值.md","contentType":"file"},{"name":"0151.翻转字符串里的单词.md","path":"problems/0151.翻转字符串里的单词.md","contentType":"file"},{"name":"0160.相交链表.md","path":"problems/0160.相交链表.md","contentType":"file"},{"name":"0188.买卖股票的最佳时机IV.md","path":"problems/0188.买卖股票的最佳时机IV.md","contentType":"file"},{"name":"0189.旋转数组.md","path":"problems/0189.旋转数组.md","contentType":"file"},{"name":"0198.打家劫舍.md","path":"problems/0198.打家劫舍.md","contentType":"file"},{"name":"0200.岛屿数量.广搜版.md","path":"problems/0200.岛屿数量.广搜版.md","contentType":"file"},{"name":"0200.岛屿数量.深搜版.md","path":"problems/0200.岛屿数量.深搜版.md","contentType":"file"},{"name":"0202.快乐数.md","path":"problems/0202.快乐数.md","contentType":"file"},{"name":"0203.移除链表元素.md","path":"problems/0203.移除链表元素.md","contentType":"file"},{"name":"0205.同构字符串.md","path":"problems/0205.同构字符串.md","contentType":"file"},{"name":"0206.翻转链表.md","path":"problems/0206.翻转链表.md","contentType":"file"},{"name":"0207.课程表.md","path":"problems/0207.课程表.md","contentType":"file"},{"name":"0209.长度最小的子数组.md","path":"problems/0209.长度最小的子数组.md","contentType":"file"},{"name":"0213.打家劫舍II.md","path":"problems/0213.打家劫舍II.md","contentType":"file"},{"name":"0216.组合总和III.md","path":"problems/0216.组合总和III.md","contentType":"file"},{"name":"0222.完全二叉树的节点个数.md","path":"problems/0222.完全二叉树的节点个数.md","contentType":"file"},{"name":"0225.用队列实现栈.md","path":"problems/0225.用队列实现栈.md","contentType":"file"},{"name":"0226.翻转二叉树.md","path":"problems/0226.翻转二叉树.md","contentType":"file"},{"name":"0232.用栈实现队列.md","path":"problems/0232.用栈实现队列.md","contentType":"file"},{"name":"0234.回文链表.md","path":"problems/0234.回文链表.md","contentType":"file"},{"name":"0235.二叉搜索树的最近公共祖先.md","path":"problems/0235.二叉搜索树的最近公共祖先.md","contentType":"file"},{"name":"0236.二叉树的最近公共祖先.md","path":"problems/0236.二叉树的最近公共祖先.md","contentType":"file"},{"name":"0239.滑动窗口最大值.md","path":"problems/0239.滑动窗口最大值.md","contentType":"file"},{"name":"0242.有效的字母异位词.md","path":"problems/0242.有效的字母异位词.md","contentType":"file"},{"name":"0257.二叉树的所有路径.md","path":"problems/0257.二叉树的所有路径.md","contentType":"file"},{"name":"0279.完全平方数.md","path":"problems/0279.完全平方数.md","contentType":"file"},{"name":"0283.移动零.md","path":"problems/0283.移动零.md","contentType":"file"},{"name":"0300.最长上升子序列.md","path":"problems/0300.最长上升子序列.md","contentType":"file"},{"name":"0309.最佳买卖股票时机含冷冻期.md","path":"problems/0309.最佳买卖股票时机含冷冻期.md","contentType":"file"},{"name":"0322.零钱兑换.md","path":"problems/0322.零钱兑换.md","contentType":"file"},{"name":"0332.重新安排行程.md","path":"problems/0332.重新安排行程.md","contentType":"file"},{"name":"0337.打家劫舍III.md","path":"problems/0337.打家劫舍III.md","contentType":"file"},{"name":"0343.整数拆分.md","path":"problems/0343.整数拆分.md","contentType":"file"},{"name":"0344.反转字符串.md","path":"problems/0344.反转字符串.md","contentType":"file"},{"name":"0347.前K个高频元素.md","path":"problems/0347.前K个高频元素.md","contentType":"file"},{"name":"0349.两个数组的交集.md","path":"problems/0349.两个数组的交集.md","contentType":"file"},{"name":"0376.摆动序列.md","path":"problems/0376.摆动序列.md","contentType":"file"},{"name":"0377.组合总和Ⅳ.md","path":"problems/0377.组合总和Ⅳ.md","contentType":"file"},{"name":"0383.赎金信.md","path":"problems/0383.赎金信.md","contentType":"file"},{"name":"0392.判断子序列.md","path":"problems/0392.判断子序列.md","contentType":"file"},{"name":"0404.左叶子之和.md","path":"problems/0404.左叶子之和.md","contentType":"file"},{"name":"0406.根据身高重建队列.md","path":"problems/0406.根据身高重建队列.md","contentType":"file"},{"name":"0416.分割等和子集.md","path":"problems/0416.分割等和子集.md","contentType":"file"},{"name":"0417.太平洋大西洋水流问题.md","path":"problems/0417.太平洋大西洋水流问题.md","contentType":"file"},{"name":"0435.无重叠区间.md","path":"problems/0435.无重叠区间.md","contentType":"file"},{"name":"0450.删除二叉搜索树中的节点.md","path":"problems/0450.删除二叉搜索树中的节点.md","contentType":"file"},{"name":"0452.用最少数量的箭引爆气球.md","path":"problems/0452.用最少数量的箭引爆气球.md","contentType":"file"},{"name":"0454.四数相加II.md","path":"problems/0454.四数相加II.md","contentType":"file"},{"name":"0455.分发饼干.md","path":"problems/0455.分发饼干.md","contentType":"file"},{"name":"0459.重复的子字符串.md","path":"problems/0459.重复的子字符串.md","contentType":"file"},{"name":"0463.岛屿的周长.md","path":"problems/0463.岛屿的周长.md","contentType":"file"},{"name":"0474.一和零.md","path":"problems/0474.一和零.md","contentType":"file"},{"name":"0491.递增子序列.md","path":"problems/0491.递增子序列.md","contentType":"file"},{"name":"0494.目标和.md","path":"problems/0494.目标和.md","contentType":"file"},{"name":"0496.下一个更大元素I.md","path":"problems/0496.下一个更大元素I.md","contentType":"file"},{"name":"0501.二叉搜索树中的众数.md","path":"problems/0501.二叉搜索树中的众数.md","contentType":"file"},{"name":"0503.下一个更大元素II.md","path":"problems/0503.下一个更大元素II.md","contentType":"file"},{"name":"0509.斐波那契数.md","path":"problems/0509.斐波那契数.md","contentType":"file"},{"name":"0513.找树左下角的值.md","path":"problems/0513.找树左下角的值.md","contentType":"file"},{"name":"0516.最长回文子序列.md","path":"problems/0516.最长回文子序列.md","contentType":"file"},{"name":"0518.零钱兑换II.md","path":"problems/0518.零钱兑换II.md","contentType":"file"},{"name":"0530.二叉搜索树的最小绝对差.md","path":"problems/0530.二叉搜索树的最小绝对差.md","contentType":"file"},{"name":"0538.把二叉搜索树转换为累加树.md","path":"problems/0538.把二叉搜索树转换为累加树.md","contentType":"file"},{"name":"0541.反转字符串II.md","path":"problems/0541.反转字符串II.md","contentType":"file"},{"name":"0583.两个字符串的删除操作.md","path":"problems/0583.两个字符串的删除操作.md","contentType":"file"},{"name":"0617.合并二叉树.md","path":"problems/0617.合并二叉树.md","contentType":"file"},{"name":"0647.回文子串.md","path":"problems/0647.回文子串.md","contentType":"file"},{"name":"0649.Dota2参议院.md","path":"problems/0649.Dota2参议院.md","contentType":"file"},{"name":"0654.最大二叉树.md","path":"problems/0654.最大二叉树.md","contentType":"file"},{"name":"0657.机器人能否返回原点.md","path":"problems/0657.机器人能否返回原点.md","contentType":"file"},{"name":"0669.修剪二叉搜索树.md","path":"problems/0669.修剪二叉搜索树.md","contentType":"file"},{"name":"0673.最长递增子序列的个数.md","path":"problems/0673.最长递增子序列的个数.md","contentType":"file"},{"name":"0674.最长连续递增序列.md","path":"problems/0674.最长连续递增序列.md","contentType":"file"},{"name":"0684.冗余连接.md","path":"problems/0684.冗余连接.md","contentType":"file"},{"name":"0685.冗余连接II.md","path":"problems/0685.冗余连接II.md","contentType":"file"},{"name":"0695.岛屿的最大面积.md","path":"problems/0695.岛屿的最大面积.md","contentType":"file"},{"name":"0700.二叉搜索树中的搜索.md","path":"problems/0700.二叉搜索树中的搜索.md","contentType":"file"},{"name":"0701.二叉搜索树中的插入操作.md","path":"problems/0701.二叉搜索树中的插入操作.md","contentType":"file"},{"name":"0704.二分查找.md","path":"problems/0704.二分查找.md","contentType":"file"},{"name":"0707.设计链表.md","path":"problems/0707.设计链表.md","contentType":"file"},{"name":"0714.买卖股票的最佳时机含手续费.md","path":"problems/0714.买卖股票的最佳时机含手续费.md","contentType":"file"},{"name":"0714.买卖股票的最佳时机含手续费（动态规划）.md","path":"problems/0714.买卖股票的最佳时机含手续费（动态规划）.md","contentType":"file"},{"name":"0718.最长重复子数组.md","path":"problems/0718.最长重复子数组.md","contentType":"file"},{"name":"0724.寻找数组的中心索引.md","path":"problems/0724.寻找数组的中心索引.md","contentType":"file"},{"name":"0738.单调递增的数字.md","path":"problems/0738.单调递增的数字.md","contentType":"file"},{"name":"0739.每日温度.md","path":"problems/0739.每日温度.md","contentType":"file"},{"name":"0743.网络延迟时间.md","path":"problems/0743.网络延迟时间.md","contentType":"file"},{"name":"0746.使用最小花费爬楼梯.md","path":"problems/0746.使用最小花费爬楼梯.md","contentType":"file"},{"name":"0763.划分字母区间.md","path":"problems/0763.划分字母区间.md","contentType":"file"},{"name":"0787.K站中转内最便宜的航班.md","path":"problems/0787.K站中转内最便宜的航班.md","contentType":"file"},{"name":"0797.所有可能的路径.md","path":"problems/0797.所有可能的路径.md","contentType":"file"},{"name":"0827.最大人工岛.md","path":"problems/0827.最大人工岛.md","contentType":"file"},{"name":"0841.钥匙和房间.md","path":"problems/0841.钥匙和房间.md","contentType":"file"},{"name":"0844.比较含退格的字符串.md","path":"problems/0844.比较含退格的字符串.md","contentType":"file"},{"name":"0860.柠檬水找零.md","path":"problems/0860.柠檬水找零.md","contentType":"file"},{"name":"0922.按奇偶排序数组II.md","path":"problems/0922.按奇偶排序数组II.md","contentType":"file"},{"name":"0925.长按键入.md","path":"problems/0925.长按键入.md","contentType":"file"},{"name":"0941.有效的山脉数组.md","path":"problems/0941.有效的山脉数组.md","contentType":"file"},{"name":"0968.监控二叉树.md","path":"problems/0968.监控二叉树.md","contentType":"file"},{"name":"0977.有序数组的平方.md","path":"problems/0977.有序数组的平方.md","contentType":"file"},{"name":"1002.查找常用字符.md","path":"problems/1002.查找常用字符.md","contentType":"file"},{"name":"1005.K次取反后最大化的数组和.md","path":"problems/1005.K次取反后最大化的数组和.md","contentType":"file"},{"name":"1020.飞地的数量.md","path":"problems/1020.飞地的数量.md","contentType":"file"},{"name":"1035.不相交的线.md","path":"problems/1035.不相交的线.md","contentType":"file"},{"name":"1047.删除字符串中的所有相邻重复项.md","path":"problems/1047.删除字符串中的所有相邻重复项.md","contentType":"file"},{"name":"1049.最后一块石头的重量II.md","path":"problems/1049.最后一块石头的重量II.md","contentType":"file"},{"name":"1143.最长公共子序列.md","path":"problems/1143.最长公共子序列.md","contentType":"file"},{"name":"1207.独一无二的出现次数.md","path":"problems/1207.独一无二的出现次数.md","contentType":"file"},{"name":"1221.分割平衡字符串.md","path":"problems/1221.分割平衡字符串.md","contentType":"file"},{"name":"1254.统计封闭岛屿的数目.md","path":"problems/1254.统计封闭岛屿的数目.md","contentType":"file"},{"name":"1334.阈值距离内邻居最少的城市.md","path":"problems/1334.阈值距离内邻居最少的城市.md","contentType":"file"},{"name":"1356.根据数字二进制下1的数目排序.md","path":"problems/1356.根据数字二进制下1的数目排序.md","contentType":"file"},{"name":"1365.有多少小于当前数字的数字.md","path":"problems/1365.有多少小于当前数字的数字.md","contentType":"file"},{"name":"1382.将二叉搜索树变平衡.md","path":"problems/1382.将二叉搜索树变平衡.md","contentType":"file"},{"name":"1791.找出星型图的中心节点.md","path":"problems/1791.找出星型图的中心节点.md","contentType":"file"},{"name":"1971.寻找图中是否存在路径.md","path":"problems/1971.寻找图中是否存在路径.md","contentType":"file"},{"name":"O(n)的算法居然超时了，此时的n究竟是多大？.md","path":"problems/O(n)的算法居然超时了，此时的n究竟是多大？.md","contentType":"file"},{"name":"toolgithub.sh","path":"problems/toolgithub.sh","contentType":"file"},{"name":"为了绝杀编辑距离，卡尔做了三步铺垫.md","path":"problems/为了绝杀编辑距离，卡尔做了三步铺垫.md","contentType":"file"},{"name":"二叉树中递归带着回溯.md","path":"problems/二叉树中递归带着回溯.md","contentType":"file"},{"name":"二叉树总结篇.md","path":"problems/二叉树总结篇.md","contentType":"file"},{"name":"二叉树理论基础.md","path":"problems/二叉树理论基础.md","contentType":"file"},{"name":"二叉树的统一迭代法.md","path":"problems/二叉树的统一迭代法.md","contentType":"file"},{"name":"二叉树的迭代遍历.md","path":"problems/二叉树的迭代遍历.md","contentType":"file"},{"name":"二叉树的递归遍历.md","path":"problems/二叉树的递归遍历.md","contentType":"file"},{"name":"剑指Offer05.替换空格.md","path":"problems/剑指Offer05.替换空格.md","contentType":"file"},{"name":"剑指Offer58-II.左旋转字符串.md","path":"problems/剑指Offer58-II.左旋转字符串.md","contentType":"file"},{"name":"动态规划-股票问题总结篇.md","path":"problems/动态规划-股票问题总结篇.md","contentType":"file"},{"name":"动态规划总结篇.md","path":"problems/动态规划总结篇.md","contentType":"file"},{"name":"动态规划理论基础.md","path":"problems/动态规划理论基础.md","contentType":"file"},{"name":"双指针总结.md","path":"problems/双指针总结.md","contentType":"file"},{"name":"哈希表总结.md","path":"problems/哈希表总结.md","contentType":"file"},{"name":"哈希表理论基础.md","path":"problems/哈希表理论基础.md","contentType":"file"},{"name":"回溯总结.md","path":"problems/回溯总结.md","contentType":"file"},{"name":"回溯算法去重问题的另一种写法.md","path":"problems/回溯算法去重问题的另一种写法.md","contentType":"file"},{"name":"回溯算法理论基础.md","path":"problems/回溯算法理论基础.md","contentType":"file"},{"name":"图论并查集理论基础.md","path":"problems/图论并查集理论基础.md","contentType":"file"},{"name":"图论广搜理论基础.md","path":"problems/图论广搜理论基础.md","contentType":"file"},{"name":"图论深搜理论基础.md","path":"problems/图论深搜理论基础.md","contentType":"file"},{"name":"字符串总结.md","path":"problems/字符串总结.md","contentType":"file"},{"name":"数组总结篇.md","path":"problems/数组总结篇.md","contentType":"file"},{"name":"数组理论基础.md","path":"problems/数组理论基础.md","contentType":"file"},{"name":"栈与队列总结.md","path":"problems/栈与队列总结.md","contentType":"file"},{"name":"栈与队列理论基础.md","path":"problems/栈与队列理论基础.md","contentType":"file"},{"name":"根据身高重建队列（vector原理讲解）.md","path":"problems/根据身高重建队列（vector原理讲解）.md","contentType":"file"},{"name":"算法模板.md","path":"problems/算法模板.md","contentType":"file"},{"name":"背包总结篇.md","path":"problems/背包总结篇.md","contentType":"file"},{"name":"背包理论基础01背包-1.md","path":"problems/背包理论基础01背包-1.md","contentType":"file"},{"name":"背包理论基础01背包-2.md","path":"problems/背包理论基础01背包-2.md","contentType":"file"},{"name":"背包问题理论基础多重背包.md","path":"problems/背包问题理论基础多重背包.md","contentType":"file"},{"name":"背包问题理论基础完全背包.md","path":"problems/背包问题理论基础完全背包.md","contentType":"file"},{"name":"贪心算法总结篇.md","path":"problems/贪心算法总结篇.md","contentType":"file"},{"name":"贪心算法理论基础.md","path":"problems/贪心算法理论基础.md","contentType":"file"},{"name":"链表总结篇.md","path":"problems/链表总结篇.md","contentType":"file"},{"name":"链表理论基础.md","path":"problems/链表理论基础.md","contentType":"file"},{"name":"面试题02.07.链表相交.md","path":"problems/面试题02.07.链表相交.md","contentType":"file"}],"totalCount":228},"":{"items":[{"name":"pics","path":"pics","contentType":"directory"},{"name":"problems","path":"problems","contentType":"directory"},{"name":"README.md","path":"README.md","contentType":"file"}],"totalCount":3}},"fileTreeProcessingTime":32.971757,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"master","listCacheKey":"v0:1714453598.065801","canEdit":false,"refType":"branch","currentOid":"b07e850a199dae1777d8831e9e811d87725396b4","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"problems/0226.翻转二叉树.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/feinan/leetcode-master/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"0226.翻转二叉树.md","displayUrl":"https://github.com/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md?raw=true","headerInfo":{"blobSize":"29.2 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"824968f","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ffeinan%2Fleetcode-master%2Fblob%2Fmaster%2Fproblems%2F0226.%25E7%25BF%25BB%25E8%25BD%25AC%25E4%25BA%258C%25E5%258F%2589%25E6%25A0%2591.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"1035","truncatedSloc":"890"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/feinan/leetcode-master/blob/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/feinan/leetcode-master/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/feinan/leetcode-master/raw/refs/heads/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["\u003cp align=\"center\"\u003e","\u003ca href=\"https://www.programmercarl.com/xunlian/xunlianying.html\" target=\"_blank\"\u003e","  \u003cimg src=\"../pics/训练营.png\" width=\"1000\"/\u003e","\u003c/a\u003e","\u003cp align=\"center\"\u003e\u003cstrong\u003e\u003ca href=\"./qita/join.md\"\u003e参与本项目\u003c/a\u003e，贡献其他语言版本的代码，拥抱开源，让更多学习算法的小伙伴们受益！\u003c/strong\u003e\u003c/p\u003e","","","# 226.翻转二叉树","","[力扣题目链接](https://leetcode.cn/problems/invert-binary-tree/)","","翻转一棵二叉树。","","","![226.翻转二叉树](https://code-thinking-1253855093.file.myqcloud.com/pics/20210203192644329.png)","","这道题目背后有一个让程序员心酸的故事，听说 Homebrew的作者Max Howell，就是因为没在白板上写出翻转二叉树，最后被Google拒绝了。（真假不做判断，权当一个乐子哈）","","## 算法公开课","","**[《代码随想录》算法视频公开课](https://programmercarl.com/other/gongkaike.html)：[听说一位巨佬面Google被拒了，因为没写出翻转二叉树 | LeetCode：226.翻转二叉树](https://www.bilibili.com/video/BV1sP4y1f7q7)，相信结合视频再看本篇题解，更有助于大家对本题的理解**。","","## 题外话","","这道题目是非常经典的题目，也是比较简单的题目（至少一看就会）。","","但正是因为这道题太简单，一看就会，一些同学都没有抓住起本质，稀里糊涂的就把这道题目过了。","","如果做过这道题的同学也建议认真看完，相信一定有所收获！","","## 思路","","我们之前介绍的都是各种方式遍历二叉树，这次要翻转了，感觉还是有点懵逼。","","这得怎么翻转呢？","","如果要从整个树来看，翻转还真的挺复杂，整个树以中间分割线进行翻转，如图：","","","![226.翻转二叉树1](https://code-thinking-1253855093.file.myqcloud.com/pics/20210203192724351.png)","","可以发现想要翻转它，其实就把每一个节点的左右孩子交换一下就可以了。","","关键在于遍历顺序，前中后序应该选哪一种遍历顺序？ （一些同学这道题都过了，但是不知道自己用的是什么顺序）","","遍历的过程中去翻转每一个节点的左右孩子就可以达到整体翻转的效果。","","**注意只要把每一个节点的左右孩子翻转一下，就可以达到整体翻转的效果**","","**这道题目使用前序遍历和后序遍历都可以，唯独中序遍历不方便，因为中序遍历会把某些节点的左右孩子翻转了两次！建议拿纸画一画，就理解了**","","那么层序遍历可以不可以呢？**依然可以的！只要把每一个节点的左右孩子翻转一下的遍历方式都是可以的！**","","### 递归法","","对于二叉树的递归法的前中后序遍历，已经在[二叉树：前中后序递归遍历](https://programmercarl.com/二叉树的递归遍历.html)详细讲解了。","","我们下文以前序遍历为例，通过动画来看一下翻转的过程:","","![翻转二叉树](https://code-thinking.cdn.bcebos.com/gifs/%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.gif)","","我们来看一下递归三部曲：","","1. 确定递归函数的参数和返回值","","参数就是要传入节点的指针，不需要其他参数了，通常此时定下来主要参数，如果在写递归的逻辑中发现还需要其他参数的时候，随时补充。","","返回值的话其实也不需要，但是题目中给出的要返回root节点的指针，可以直接使用题目定义好的函数，所以就函数的返回类型为`TreeNode*`。","","```cpp","TreeNode* invertTree(TreeNode* root)","```","","2. 确定终止条件","","当前节点为空的时候，就返回","","```cpp","if (root == NULL) return root;","```","","3. 确定单层递归的逻辑","","因为是先前序遍历，所以先进行交换左右孩子节点，然后反转左子树，反转右子树。","","```cpp","swap(root-\u003eleft, root-\u003eright);","invertTree(root-\u003eleft);","invertTree(root-\u003eright);","```","","基于这递归三步法，代码基本写完，C++代码如下：","","```CPP","class Solution {","public:","    TreeNode* invertTree(TreeNode* root) {","        if (root == NULL) return root;","        swap(root-\u003eleft, root-\u003eright);  // 中","        invertTree(root-\u003eleft);         // 左","        invertTree(root-\u003eright);        // 右","        return root;","    }","};","```","","### 迭代法","","#### 深度优先遍历","","[二叉树：听说递归能做的，栈也能做！](https://programmercarl.com/二叉树的迭代遍历.html)中给出了前中后序迭代方式的写法，所以本题可以很轻松的写出如下迭代法的代码：","","C++代码迭代法（前序遍历）","","```CPP","class Solution {","public:","    TreeNode* invertTree(TreeNode* root) {","        if (root == NULL) return root;","        stack\u003cTreeNode*\u003e st;","        st.push(root);","        while(!st.empty()) {","            TreeNode* node = st.top();              // 中","            st.pop();","            swap(node-\u003eleft, node-\u003eright);","            if(node-\u003eright) st.push(node-\u003eright);   // 右","            if(node-\u003eleft) st.push(node-\u003eleft);     // 左","        }","        return root;","    }","};","```","如果这个代码看不懂的话可以再回顾一下[二叉树：听说递归能做的，栈也能做！](https://programmercarl.com/二叉树的迭代遍历.html)。","","","我们在[二叉树：前中后序迭代方式的统一写法](https://programmercarl.com/二叉树的统一迭代法.html)中介绍了统一的写法，所以，本题也只需将文中的代码少做修改便可。","","C++代码如下迭代法（前序遍历）","","```CPP","class Solution {","public:","    TreeNode* invertTree(TreeNode* root) {","        stack\u003cTreeNode*\u003e st;","        if (root != NULL) st.push(root);","        while (!st.empty()) {","            TreeNode* node = st.top();","            if (node != NULL) {","                st.pop();","                if (node-\u003eright) st.push(node-\u003eright);  // 右","                if (node-\u003eleft) st.push(node-\u003eleft);    // 左","                st.push(node);                          // 中","                st.push(NULL);","            } else {","                st.pop();","                node = st.top();","                st.pop();","                swap(node-\u003eleft, node-\u003eright);          // 节点处理逻辑","            }","        }","        return root;","    }","};","```","","如果上面这个代码看不懂，回顾一下文章[二叉树：前中后序迭代方式的统一写法](https://programmercarl.com/二叉树的统一迭代法.html)。","","#### 广度优先遍历","","也就是层序遍历，层数遍历也是可以翻转这棵树的，因为层序遍历也可以把每个节点的左右孩子都翻转一遍，代码如下：","","```CPP","class Solution {","public:","    TreeNode* invertTree(TreeNode* root) {","        queue\u003cTreeNode*\u003e que;","        if (root != NULL) que.push(root);","        while (!que.empty()) {","            int size = que.size();","            for (int i = 0; i \u003c size; i++) {","                TreeNode* node = que.front();","                que.pop();","                swap(node-\u003eleft, node-\u003eright); // 节点处理","                if (node-\u003eleft) que.push(node-\u003eleft);","                if (node-\u003eright) que.push(node-\u003eright);","            }","        }","        return root;","    }","};","```","如果对以上代码不理解，或者不清楚二叉树的层序遍历，可以看这篇[二叉树：层序遍历登场！](https://programmercarl.com/0102.二叉树的层序遍历.html)","","## 拓展 ","","**文中我指的是递归的中序遍历是不行的，因为使用递归的中序遍历，某些节点的左右孩子会翻转两次。**","","如果非要使用递归中序的方式写，也可以，如下代码就可以避免节点左右孩子翻转两次的情况：","","```CPP","class Solution {","public:","    TreeNode* invertTree(TreeNode* root) {","        if (root == NULL) return root;","        invertTree(root-\u003eleft);         // 左","        swap(root-\u003eleft, root-\u003eright);  // 中","        invertTree(root-\u003eleft);         // 注意 这里依然要遍历左孩子，因为中间节点已经翻转了","        return root;","    }","};","```","","代码虽然可以，但这毕竟不是真正的递归中序遍历了。","","但使用迭代方式统一写法的中序是可以的。","","代码如下：","","```CPP","class Solution {","public:","    TreeNode* invertTree(TreeNode* root) {","        stack\u003cTreeNode*\u003e st;","        if (root != NULL) st.push(root);","        while (!st.empty()) {","            TreeNode* node = st.top();","            if (node != NULL) {","                st.pop();","                if (node-\u003eright) st.push(node-\u003eright);  // 右","                st.push(node);                          // 中","                st.push(NULL);","                if (node-\u003eleft) st.push(node-\u003eleft);    // 左","","            } else {","                st.pop();","                node = st.top();","                st.pop();","                swap(node-\u003eleft, node-\u003eright);          // 节点处理逻辑","            }","        }","        return root;","    }","};","","```","","为什么这个中序就是可以的呢，因为这是用栈来遍历，而不是靠指针来遍历，避免了递归法中翻转了两次的情况，大家可以画图理解一下，这里有点意思的。","","## 总结","","针对二叉树的问题，解题之前一定要想清楚究竟是前中后序遍历，还是层序遍历。","","**二叉树解题的大忌就是自己稀里糊涂的过了（因为这道题相对简单），但是也不知道自己是怎么遍历的。**","","这也是造成了二叉树的题目“一看就会，一写就废”的原因。","","**针对翻转二叉树，我给出了一种递归，三种迭代（两种模拟深度优先遍历，一种层序遍历）的写法，都是之前我们讲过的写法，融汇贯通一下而已。**","","大家一定也有自己的解法，但一定要成方法论，这样才能通用，才能举一反三！","","## 其他语言版本","","","### Java:","```Java","//DFS递归","class Solution {","   /**","     * 前后序遍历都可以","     * 中序不行，因为先左孩子交换孩子，再根交换孩子（做完后，右孩子已经变成了原来的左孩子），再右孩子交换孩子（此时其实是对原来的左孩子做交换）","     */","    public TreeNode invertTree(TreeNode root) {","        if (root == null) {","            return null;","        }","        invertTree(root.left);","        invertTree(root.right);","        swapChildren(root);","        return root;","    }","","    private void swapChildren(TreeNode root) {","        TreeNode tmp = root.left;","        root.left = root.right;","        root.right = tmp;","    }","}","","//BFS","class Solution {","    public TreeNode invertTree(TreeNode root) {","        if (root == null) {return null;}","        ArrayDeque\u003cTreeNode\u003e deque = new ArrayDeque\u003c\u003e();","        deque.offer(root);","        while (!deque.isEmpty()) {","            int size = deque.size();","            while (size-- \u003e 0) {","                TreeNode node = deque.poll();","                swap(node);","                if (node.left != null) deque.offer(node.left);","                if (node.right != null) deque.offer(node.right);","            }","        }","        return root;","    }","","    public void swap(TreeNode root) {","        TreeNode temp = root.left;","        root.left = root.right;","        root.right = temp;","    }","}","```","","### Python:","","递归法：前序遍历：","```python","# Definition for a binary tree node.","# class TreeNode:","#     def __init__(self, val=0, left=None, right=None):","#         self.val = val","#         self.left = left","#         self.right = right","class Solution:","    def invertTree(self, root: TreeNode) -\u003e TreeNode:","        if not root:","            return None","        root.left, root.right = root.right, root.left","        self.invertTree(root.left)","        self.invertTree(root.right)","        return root","```","","迭代法：前序遍历：","```python","# Definition for a binary tree node.","# class TreeNode:","#     def __init__(self, val=0, left=None, right=None):","#         self.val = val","#         self.left = left","#         self.right = right","class Solution:","    def invertTree(self, root: TreeNode) -\u003e TreeNode:","        if not root:","            return None      ","        stack = [root]        ","        while stack:","            node = stack.pop()   ","            node.left, node.right = node.right, node.left                   ","            if node.left:","                stack.append(node.left)","            if node.right:","                stack.append(node.right)  ","        return root","```","","","递归法：中序遍历：","```python","# Definition for a binary tree node.","# class TreeNode:","#     def __init__(self, val=0, left=None, right=None):","#         self.val = val","#         self.left = left","#         self.right = right","class Solution:","    def invertTree(self, root: TreeNode) -\u003e TreeNode:","        if not root:","            return None","        self.invertTree(root.left)","        root.left, root.right = root.right, root.left","        self.invertTree(root.left)","        return root","```","","迭代法：中序遍历：","```python","# Definition for a binary tree node.","# class TreeNode:","#     def __init__(self, val=0, left=None, right=None):","#         self.val = val","#         self.left = left","#         self.right = right","class Solution:","    def invertTree(self, root: TreeNode) -\u003e TreeNode:","        if not root:","            return None      ","        stack = [root]        ","        while stack:","            node = stack.pop()                   ","            if node.left:","                stack.append(node.left)","            node.left, node.right = node.right, node.left               ","            if node.left:","                stack.append(node.left)       ","        return root","```","","","递归法：后序遍历：","```python","# Definition for a binary tree node.","# class TreeNode:","#     def __init__(self, val=0, left=None, right=None):","#         self.val = val","#         self.left = left","#         self.right = right","class Solution:","    def invertTree(self, root: TreeNode) -\u003e TreeNode:","        if not root:","            return None","        self.invertTree(root.left)","        self.invertTree(root.right)","        root.left, root.right = root.right, root.left","        return root","```","","迭代法：后序遍历：","```python","# Definition for a binary tree node.","# class TreeNode:","#     def __init__(self, val=0, left=None, right=None):","#         self.val = val","#         self.left = left","#         self.right = right","class Solution:","    def invertTree(self, root: TreeNode) -\u003e TreeNode:","        if not root:","            return None      ","        stack = [root]        ","        while stack:","            node = stack.pop()                   ","            if node.left:","                stack.append(node.left)","            if node.right:","                stack.append(node.right)  ","            node.left, node.right = node.right, node.left               ","     ","        return root","```","","","","","","迭代法：广度优先遍历（层序遍历）：","```python","# Definition for a binary tree node.","# class TreeNode:","#     def __init__(self, val=0, left=None, right=None):","#         self.val = val","#         self.left = left","#         self.right = right","class Solution:","    def invertTree(self, root: TreeNode) -\u003e TreeNode:","        if not root: ","            return None","","        queue = collections.deque([root])    ","        while queue:","            for i in range(len(queue)):","                node = queue.popleft()","                node.left, node.right = node.right, node.left","                if node.left: queue.append(node.left)","                if node.right: queue.append(node.right)","        return root   ","","```","","### Go:","","递归版本的前序遍历","```Go","func invertTree(root *TreeNode) *TreeNode {","    if root == nil {","        return nil","    }","    root.Left, root.Right = root.Right, root.Left    //交换","    ","    invertTree(root.Left)","    invertTree(root.Right)","","    return root","}","```","","递归版本的后序遍历","","```go","func invertTree(root *TreeNode) *TreeNode {","    if root == nil {","        return root","    }","    ","    invertTree(root.Left)     //遍历左节点","    invertTree(root.Right)    //遍历右节点","    root.Left, root.Right = root.Right, root.Left    //交换","    ","    return root","}","```","","迭代版本的前序遍历","","```go","func invertTree(root *TreeNode) *TreeNode {","    stack := []*TreeNode{}","    node := root","    for node != nil || len(stack) \u003e 0 {","        for node != nil {","            node.Left, node.Right = node.Right, node.Left    //交换","            stack = append(stack,node)","            node = node.Left","        }","        node = stack[len(stack)-1]","        stack = stack[:len(stack)-1]","        node = node.Right","    }","    ","    return root","}","```","","迭代版本的后序遍历","","```go","func invertTree(root *TreeNode) *TreeNode {","    stack := []*TreeNode{}","    node := root","    var prev *TreeNode","    for node != nil || len(stack) \u003e 0 {","        for node != nil {","            stack = append(stack, node)","            node = node.Left","        }","        node = stack[len(stack)-1]","        stack = stack[:len(stack)-1]","        if node.Right == nil || node.Right == prev {","            node.Left, node.Right = node.Right, node.Left     //交换","            prev = node","            node = nil","        } else {","            stack = append(stack, node)","            node = node.Right","        }","    }","    ","    return root","}","```","","层序遍历","","```go","func invertTree(root *TreeNode) *TreeNode {","    if root == nil{","        return root","    }","    queue := list.New()","    node := root","    queue.PushBack(node)","    for queue.Len() \u003e 0 {","        length := queue.Len()","        for i := 0; i \u003c length; i++ {","            e := queue.Remove(queue.Front()).(*TreeNode)","            e.Left, e.Right = e.Right, e.Left    //交换","            if e.Left != nil {","                queue.PushBack(e.Left)","            }","            if e.Right != nil {","                queue.PushBack(e.Right)","            }","        }","    }","    return root","}","```","","### JavaScript:","","使用递归版本的前序遍历","```javascript","var invertTree = function(root) {","    // 终止条件","    if (!root) {","        return null;","    }","    // 交换左右节点","    const rightNode = root.right;","    root.right = invertTree(root.left);","    root.left = invertTree(rightNode);","    return root;","};","```","使用迭代版本(统一模板))的前序遍历：","```javascript","var invertTree = function(root) {","    //我们先定义节点交换函数","    const invertNode = function(root, left, right) {","        let temp = left;","        left = right;","        right = temp;","        root.left = left;","        root.right = right;","    }","    //使用迭代方法的前序遍历 ","    let stack = [];","    if(root === null) {","        return root;","    }","    stack.push(root);","    while(stack.length) {","        let node = stack.pop();","        if(node !== null) {","            //前序遍历顺序中左右  入栈顺序是前序遍历的倒序右左中","            node.right \u0026\u0026 stack.push(node.right);","            node.left \u0026\u0026 stack.push(node.left);","            stack.push(node);","            stack.push(null);","        } else {","            node = stack.pop();","            //节点处理逻辑","            invertNode(node, node.left, node.right);","        }","    }","    return root;","};","```","使用层序遍历：","```javascript","var invertTree = function(root) {","    //我们先定义节点交换函数","    const invertNode = function(root, left, right) {","        let temp = left;","        left = right;","        right = temp;","        root.left = left;","        root.right = right;","    }","    //使用层序遍历","    let queue = [];","    if(root === null) {","        return root;","    } ","    queue.push(root);","    while(queue.length) {","        let length = queue.length;","        while(length--) {","            let node = queue.shift();","            //节点处理逻辑","            invertNode(node, node.left, node.right);","            node.left \u0026\u0026 queue.push(node.left);","            node.right \u0026\u0026 queue.push(node.right);","        }","    }","    return root;","};","```","","### TypeScript：","","递归法：","","```typescript","// 递归法（前序遍历）","function invertTree(root: TreeNode | null): TreeNode | null {","    if (root === null) return root;","    let tempNode: TreeNode | null = root.left;","    root.left = root.right;","    root.right = tempNode;","    invertTree(root.left);","    invertTree(root.right);","    return root;","};","","// 递归法（后序遍历）","function invertTree(root: TreeNode | null): TreeNode | null {","    if (root === null) return root;","    invertTree(root.left);","    invertTree(root.right);","    let tempNode: TreeNode | null = root.left;","    root.left = root.right;","    root.right = tempNode;","    return root;","};","","// 递归法（中序遍历）","function invertTree(root: TreeNode | null): TreeNode | null {","    if (root === null) return root;","    invertTree(root.left);","    let tempNode: TreeNode | null = root.left;","    root.left = root.right;","    root.right = tempNode;","    // 因为左右节点已经进行交换，此时的root.left 是原先的root.right","    invertTree(root.left);","    return root;","};","```","","迭代法：","","```typescript","// 迭代法（栈模拟前序遍历）","function invertTree(root: TreeNode | null): TreeNode | null {","    let helperStack: TreeNode[] = [];","    let curNode: TreeNode,","        tempNode: TreeNode | null;","    if (root !== null) helperStack.push(root);","    while (helperStack.length \u003e 0) {","        curNode = helperStack.pop()!;","        // 入栈操作最好在交换节点之前进行，便于理解","        if (curNode.right) helperStack.push(curNode.right);","        if (curNode.left) helperStack.push(curNode.left);","        tempNode = curNode.left;","        curNode.left = curNode.right;","        curNode.right = tempNode;","    }","    return root;","};","","// 迭代法（栈模拟中序遍历-统一写法形式）","function invertTree(root: TreeNode | null): TreeNode | null {","    let helperStack: (TreeNode | null)[] = [];","    let curNode: TreeNode | null,","        tempNode: TreeNode | null;","    if (root !== null) helperStack.push(root);","    while (helperStack.length \u003e 0) {","        curNode = helperStack.pop();","        if (curNode !== null) {","            if (curNode.right !== null) helperStack.push(curNode.right);","            helperStack.push(curNode);","            helperStack.push(null);","            if (curNode.left !== null) helperStack.push(curNode.left);","        } else {","            curNode = helperStack.pop()!;","            tempNode = curNode.left;","            curNode.left = curNode.right;","            curNode.right = tempNode;","        }","    }","    return root;","};","","// 迭代法（栈模拟后序遍历-统一写法形式）","function invertTree(root: TreeNode | null): TreeNode | null {","    let helperStack: (TreeNode | null)[] = [];","    let curNode: TreeNode | null,","        tempNode: TreeNode | null;","    if (root !== null) helperStack.push(root);","    while (helperStack.length \u003e 0) {","        curNode = helperStack.pop();","        if (curNode !== null) {","            helperStack.push(curNode);","            helperStack.push(null);","            if (curNode.right !== null) helperStack.push(curNode.right);","            if (curNode.left !== null) helperStack.push(curNode.left);","        } else {","            curNode = helperStack.pop()!;","            tempNode = curNode.left;","            curNode.left = curNode.right;","            curNode.right = tempNode;","        }","    }","    return root;","};","","// 迭代法（队列模拟层序遍历）","function invertTree(root: TreeNode | null): TreeNode | null {","    const helperQueue: TreeNode[] = [];","    let curNode: TreeNode,","        tempNode: TreeNode | null;","    if (root !== null) helperQueue.push(root);","    while (helperQueue.length \u003e 0) {","        for (let i = 0, length = helperQueue.length; i \u003c length; i++) {","            curNode = helperQueue.shift()!;","            tempNode = curNode.left;","            curNode.left = curNode.right;","            curNode.right = tempNode;","            if (curNode.left !== null) helperQueue.push(curNode.left);","            if (curNode.right !== null) helperQueue.push(curNode.right);","        }","    }","    return root;","};","```","","### C:","","递归法","```c","struct TreeNode* invertTree(struct TreeNode* root){","    if(!root)","        return NULL;","    //交换结点的左右孩子（中）","    struct TreeNode* temp = root-\u003eright;","    root-\u003eright = root-\u003eleft;","    root-\u003eleft = temp;","    左","    invertTree(root-\u003eleft);","    //右","    invertTree(root-\u003eright);","    return root;","}","```","","迭代法：深度优先遍历","```c","struct TreeNode* invertTree(struct TreeNode* root){","    if(!root)","        return NULL;","    //存储结点的栈","    struct TreeNode** stack = (struct TreeNode**)malloc(sizeof(struct TreeNode*) * 100);","    int stackTop = 0;","    //将根节点入栈","    stack[stackTop++] = root;","    //若栈中还有元素（进行循环）","    while(stackTop) {","        //取出栈顶元素","        struct TreeNode* temp = stack[--stackTop];","        //交换结点的左右孩子","        struct TreeNode* tempNode = temp-\u003eright;","        temp-\u003eright = temp-\u003eleft;","        temp-\u003eleft = tempNode;","        //若当前结点有左右孩子，将其入栈","        if(temp-\u003eright)","            stack[stackTop++] = temp-\u003eright;","        if(temp-\u003eleft)","            stack[stackTop++] = temp-\u003eleft;","    }","    return root;","}","```","","### Swift：","```swift","// 前序遍历-递归","func invertTree(_ root: TreeNode?) -\u003e TreeNode? {","    guard let root = root else {","        return root","    }","    let tmp = root.left","    root.left = root.right","    root.right = tmp","    let _ = invertTree(root.left)","    let _ = invertTree(root.right)","    return root","}","","// 层序遍历-迭代","func invertTree1(_ root: TreeNode?) -\u003e TreeNode? {","    guard let root = root else {","        return nil","    }","    var queue = [TreeNode]()","    queue.append(root)","    while !queue.isEmpty {","        let node = queue.removeFirst()","        let tmp = node.left","        node.left = node.right","        node.right = tmp","        if let left = node.left {","            queue.append(left)","        }","        if let right = node.right {","            queue.append(right)","        }","    }","    return root","}","```","","","深度优先递归。","","```swift","func invertTree(_ root: TreeNode?) -\u003e TreeNode? {","    guard let node = root else { return root }","    swap(\u0026node.left, \u0026node.right)","    _ = invertTree(node.left)","    _ = invertTree(node.right)","    return root","}","```","","深度优先迭代，子结点顺序不重要，从根结点出发深度遍历即可。","","```swift","func invertTree(_ root: TreeNode?) -\u003e TreeNode? {","    guard let node = root else { return root }","    var stack = [node]","    while !stack.isEmpty {","        guard let node = stack.popLast() else { break }","        swap(\u0026node.left, \u0026node.right)","        if let node = node.left { stack.append(node) }","        if let node = node.right { stack.append(node) }","    }","    return root","}","```","","广度优先迭代。","","```swift","func invertTree(_ root: TreeNode?) -\u003e TreeNode? {","    guard let node = root else { return root }","    var queue = [node]","    while !queue.isEmpty {","        let count = queue.count","        for _ in 0 ..\u003c count {","            let node = queue.removeFirst()","            swap(\u0026node.left, \u0026node.right)","            if let node = node.left { queue.append(node) }","            if let node = node.right { queue.append(node) }","        }","    }","    return root","}","```","深度优先遍历（前序遍历）:","```scala","object Solution {","  def invertTree(root: TreeNode): TreeNode = {","    if (root == null) return root","    // 递归","    def process(node: TreeNode): Unit = {","      if (node == null) return","      // 翻转节点","      val curNode = node.left","      node.left = node.right","      node.right = curNode","      process(node.left)","      process(node.right)","    }","    process(root)","    root","  }","}","```","","广度优先遍历（层序遍历）:","```scala","object Solution {","  import scala.collection.mutable","  def invertTree(root: TreeNode): TreeNode = {","    if (root == null) return root","    val queue = mutable.Queue[TreeNode]()","    queue.enqueue(root)","    while (!queue.isEmpty) {","      val len = queue.size","      for (i \u003c- 0 until len) {","        var curNode = queue.dequeue()","        if (curNode.left != null) queue.enqueue(curNode.left)","        if (curNode.right != null) queue.enqueue(curNode.right)","        // 翻转","        var tmpNode = curNode.left","        curNode.left = curNode.right","        curNode.right = tmpNode","      }","    }","    root","  }","}","```","","### Rust:","","```rust","impl Solution {","    //* 递归 */","    pub fn invert_tree(root: Option\u003cRc\u003cRefCell\u003cTreeNode\u003e\u003e\u003e) -\u003e Option\u003cRc\u003cRefCell\u003cTreeNode\u003e\u003e\u003e {","        if let Some(node) = root.as_ref() {","            let (left, right) = (node.borrow().left.clone(), node.borrow().right.clone());","            node.borrow_mut().left = Self::invert_tree(right);","            node.borrow_mut().right = Self::invert_tree(left);","        }","        root","    }","    //* 迭代 */","    pub fn invert_tree(root: Option\u003cRc\u003cRefCell\u003cTreeNode\u003e\u003e\u003e) -\u003e Option\u003cRc\u003cRefCell\u003cTreeNode\u003e\u003e\u003e {","        let mut stack = vec![root.clone()];","        while !stack.is_empty() {","            if let Some(node) = stack.pop().unwrap() {","                let (left, right) = (node.borrow().left.clone(), node.borrow().right.clone());","                stack.push(right.clone());","                stack.push(left.clone());","                node.borrow_mut().left = right;","                node.borrow_mut().right = left;","            }","        }","        root","    }","}","```","","### C#:","","```csharp","//递归","public class Solution {","    public TreeNode InvertTree(TreeNode root) {","    if (root == null) return root;","    ","    swap(root);","    InvertTree(root.left);","    InvertTree(root.right);","    return root;","    }","   ","    public void swap(TreeNode node) {","        TreeNode temp = node.left;","        node.left = node.right;","        node.right = temp;","    }","}","```","","```csharp","//迭代","public class Solution {","public TreeNode InvertTree(TreeNode root) {","    if(root == null) return root;","    (root.left,root.right) = (root.right, root.left);","    InvertTree(root.left);","    InvertTree(root.right);","    return root;","}","}","```","","","\u003cp align=\"center\"\u003e","\u003ca href=\"https://programmercarl.com/other/kstar.html\" target=\"_blank\"\u003e","  \u003cimg src=\"../pics/网站星球宣传海报.jpg\" width=\"1000\"/\u003e","\u003c/a\u003e"],"stylingDirectives":[[[1,2,"pl-ent"],[3,8,"pl-e"],[9,10,"pl-s"],[10,16,"pl-s"],[16,17,"pl-s"]],[[1,2,"pl-ent"],[3,7,"pl-e"],[8,9,"pl-s"],[9,64,"pl-s"],[64,65,"pl-s"],[66,72,"pl-e"],[73,74,"pl-s"],[74,80,"pl-s"],[80,81,"pl-s"]],[[3,6,"pl-ent"],[7,10,"pl-e"],[11,12,"pl-s"],[12,27,"pl-s"],[27,28,"pl-s"],[29,34,"pl-e"],[35,36,"pl-s"],[36,40,"pl-s"],[40,41,"pl-s"]],[[2,3,"pl-ent"]],[[1,2,"pl-ent"],[3,8,"pl-e"],[9,10,"pl-s"],[10,16,"pl-s"],[16,17,"pl-s"],[19,25,"pl-ent"],[27,28,"pl-ent"],[29,33,"pl-e"],[34,35,"pl-s"],[35,49,"pl-s"],[49,50,"pl-s"],[58,59,"pl-ent"],[95,101,"pl-ent"],[104,105,"pl-ent"]],[],[],[[0,11,"pl-mh"],[2,11,"pl-en"]],[],[[0,1,"pl-s"],[7,8,"pl-s"],[8,9,"pl-s"],[9,57,"pl-corl"],[57,58,"pl-s"]],[],[],[],[],[[0,2,"pl-s"],[11,12,"pl-s"],[12,13,"pl-s"],[13,90,"pl-corl"],[90,91,"pl-s"]],[],[],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,2,"pl-s"],[2,3,"pl-s"],[17,18,"pl-s"],[18,19,"pl-s"],[19,66,"pl-corl"],[66,67,"pl-s"],[68,69,"pl-s"],[117,118,"pl-s"],[118,119,"pl-s"],[119,162,"pl-corl"],[162,163,"pl-s"],[189,191,"pl-s"]],[],[[0,6,"pl-mh"],[3,6,"pl-en"]],[],[],[],[],[],[],[],[[0,5,"pl-mh"],[3,5,"pl-en"]],[],[],[],[],[],[],[],[],[[0,2,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,91,"pl-corl"],[91,92,"pl-s"]],[],[],[],[],[],[],[],[[0,2,"pl-s"],[34,36,"pl-s"]],[],[[0,2,"pl-s"],[66,68,"pl-s"]],[],[[13,15,"pl-s"],[49,51,"pl-s"]],[],[[0,7,"pl-mh"],[4,7,"pl-en"]],[],[[20,21,"pl-s"],[33,34,"pl-s"],[34,35,"pl-s"],[35,75,"pl-corl"],[75,76,"pl-s"]],[],[],[],[[0,2,"pl-s"],[7,8,"pl-s"],[8,9,"pl-s"],[9,100,"pl-corl"],[100,101,"pl-s"]],[],[],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[],[],[[59,60,"pl-s"],[60,69,"pl-c1"],[69,70,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[10,20,"pl-en"],[29,30,"pl-s"]],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,0,"pl-c1"]],[[0,9,"pl-c1"]],[[0,0,"pl-c1"]],[[0,13,"pl-c1"]],[[0,0,"pl-c1"]],[[0,6,"pl-c1"]],[[0,30,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,4,"pl-en"]],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,0,"pl-c1"]],[[0,24,"pl-c1"]],[[0,0,"pl-c1"]],[[0,6,"pl-c1"]],[[0,16,"pl-c1"]],[[0,7,"pl-c1"]],[[0,42,"pl-c1"]],[[0,38,"pl-c1"]],[[0,44,"pl-c1"]],[[0,44,"pl-c1"]],[[0,44,"pl-c1"]],[[0,20,"pl-c1"]],[[0,5,"pl-c1"]],[[0,2,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,7,"pl-mh"],[4,7,"pl-en"]],[],[[0,11,"pl-mh"],[5,11,"pl-en"]],[],[[0,1,"pl-s"],[18,19,"pl-s"],[19,20,"pl-s"],[20,60,"pl-corl"],[60,61,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[],[[12,13,"pl-s"],[33,34,"pl-s"]],[],[[22,23,"pl-s"]],[],[],[[20,21,"pl-s"]],[],[],[],[],[],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,80,"pl-c1"]],[[0,0,"pl-c1"]],[[0,0,"pl-c1"]],[[0,96,"pl-c1"]],[[0,0,"pl-c1"]],[[0,16,"pl-c1"]],[[0,0,"pl-c1"]],[[0,6,"pl-c1"]],[[0,16,"pl-c1"]],[[0,7,"pl-c1"]],[[0,42,"pl-c1"]],[[0,28,"pl-c1"]],[[0,40,"pl-c1"]],[[0,29,"pl-c1"]],[[0,38,"pl-c1"]],[[0,31,"pl-c1"]],[[0,25,"pl-c1"]],[[0,60,"pl-c1"]],[[0,60,"pl-c1"]],[[0,60,"pl-c1"]],[[0,30,"pl-c1"]],[[0,20,"pl-c1"]],[[0,25,"pl-c1"]],[[0,32,"pl-c1"]],[[0,25,"pl-c1"]],[[0,65,"pl-c1"]],[[0,13,"pl-c1"]],[[0,9,"pl-c1"]],[[0,20,"pl-c1"]],[[0,5,"pl-c1"]],[[0,2,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[18,19,"pl-s"],[36,37,"pl-s"],[37,38,"pl-s"],[38,79,"pl-corl"],[79,80,"pl-s"]],[],[[0,11,"pl-mh"],[5,11,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[],[[12,13,"pl-s"],[33,34,"pl-s"]],[[22,23,"pl-s"]],[],[],[],[],[[24,25,"pl-s"]],[],[],[],[],[],[],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,90,"pl-c1"]],[[0,0,"pl-c1"]],[[0,6,"pl-c1"]],[[0,0,"pl-c1"]],[[0,49,"pl-c1"]],[[0,0,"pl-c1"]],[[0,42,"pl-c1"]],[[0,0,"pl-c1"]],[[0,6,"pl-c1"]],[[0,16,"pl-c1"]],[[0,7,"pl-c1"]],[[0,42,"pl-c1"]],[[0,38,"pl-c1"]],[[0,44,"pl-c1"]],[[0,44,"pl-c1"]],[[0,68,"pl-c1"]],[[0,20,"pl-c1"]],[[0,5,"pl-c1"]],[[0,2,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[],[],[],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[],[[12,13,"pl-s"],[33,34,"pl-s"]],[[22,23,"pl-s"]],[],[],[[20,21,"pl-s"]],[],[],[],[],[],[],[],[[4,20,"pl-c1"]],[[4,25,"pl-c1"]],[[4,32,"pl-c1"]],[[4,25,"pl-c1"]],[[4,65,"pl-c1"]],[[4,13,"pl-c1"]],[],[[8,14,"pl-k"]],[],[],[],[[0,3,"pl-s"]],[],[],[],[[0,5,"pl-mh"],[3,5,"pl-en"]],[],[],[],[[0,2,"pl-s"],[48,50,"pl-s"]],[],[],[],[[0,2,"pl-s"],[67,69,"pl-s"]],[],[],[],[[0,9,"pl-mh"],[3,9,"pl-en"]],[],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,7,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[[3,6,"pl-c"],[3,6,"pl-c"]],[[0,15,"pl-c"]],[[0,75,"pl-c"]],[[0,7,"pl-c"],[5,7,"pl-c"]],[[4,10,"pl-k"],[11,19,"pl-smi"],[20,30,"pl-en"],[31,39,"pl-smi"],[40,44,"pl-v"]],[[8,10,"pl-k"],[17,19,"pl-k"],[20,24,"pl-c1"]],[[12,18,"pl-k"],[19,23,"pl-c1"]],[],[[23,24,"pl-k"]],[[23,24,"pl-k"]],[],[[8,14,"pl-k"]],[],[],[[4,11,"pl-k"],[12,16,"pl-k"],[17,29,"pl-en"],[30,38,"pl-smi"],[39,43,"pl-v"]],[[8,16,"pl-smi"],[21,22,"pl-k"],[27,28,"pl-k"]],[[12,13,"pl-k"],[18,19,"pl-k"],[24,25,"pl-k"]],[[12,13,"pl-k"],[19,20,"pl-k"]],[],[],[],[[0,5,"pl-c"],[0,2,"pl-c"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,10,"pl-k"],[11,19,"pl-smi"],[20,30,"pl-en"],[31,39,"pl-smi"],[40,44,"pl-v"]],[[8,10,"pl-k"],[17,19,"pl-k"],[20,24,"pl-c1"],[27,33,"pl-k"],[34,38,"pl-c1"]],[[8,28,"pl-k"],[19,27,"pl-smi"],[35,36,"pl-k"],[37,40,"pl-k"],[41,53,"pl-k"]],[[13,14,"pl-k"]],[[8,13,"pl-k"],[15,16,"pl-k"],[21,22,"pl-k"]],[[12,15,"pl-k"],[21,22,"pl-k"],[28,29,"pl-k"]],[[12,17,"pl-k"],[23,25,"pl-k"],[26,27,"pl-k"],[28,29,"pl-c1"]],[[16,24,"pl-smi"],[30,31,"pl-k"],[37,38,"pl-k"]],[],[[16,18,"pl-k"],[24,25,"pl-k"],[30,32,"pl-k"],[33,37,"pl-c1"],[44,45,"pl-k"],[55,56,"pl-k"]],[[16,18,"pl-k"],[24,25,"pl-k"],[31,33,"pl-k"],[34,38,"pl-c1"],[45,46,"pl-k"],[56,57,"pl-k"]],[],[],[[8,14,"pl-k"]],[],[],[[4,10,"pl-k"],[11,15,"pl-k"],[16,20,"pl-en"],[21,29,"pl-smi"],[30,34,"pl-v"]],[[8,16,"pl-smi"],[22,23,"pl-k"],[28,29,"pl-k"]],[[12,13,"pl-k"],[18,19,"pl-k"],[24,25,"pl-k"]],[[12,13,"pl-k"],[19,20,"pl-k"]],[],[],[[0,3,"pl-s"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,36,"pl-c"],[0,1,"pl-c"]],[[0,17,"pl-c"],[0,1,"pl-c"]],[[0,55,"pl-c"],[0,1,"pl-c"]],[[0,24,"pl-c"],[0,1,"pl-c"]],[[0,26,"pl-c"],[0,1,"pl-c"]],[[0,28,"pl-c"],[0,1,"pl-c"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,7,"pl-k"],[8,18,"pl-en"],[19,23,"pl-smi"],[19,23,"pl-smi"],[25,29,"pl-smi"]],[[8,10,"pl-k"],[11,14,"pl-k"]],[[12,18,"pl-k"],[19,23,"pl-c1"]],[[30,31,"pl-k"]],[[8,12,"pl-c1"]],[[8,12,"pl-c1"]],[[8,14,"pl-k"]],[[0,3,"pl-s"]],[],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,36,"pl-c"],[0,1,"pl-c"]],[[0,17,"pl-c"],[0,1,"pl-c"]],[[0,55,"pl-c"],[0,1,"pl-c"]],[[0,24,"pl-c"],[0,1,"pl-c"]],[[0,26,"pl-c"],[0,1,"pl-c"]],[[0,28,"pl-c"],[0,1,"pl-c"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,7,"pl-k"],[8,18,"pl-en"],[19,23,"pl-smi"],[19,23,"pl-smi"],[25,29,"pl-smi"]],[[8,10,"pl-k"],[11,14,"pl-k"]],[[12,18,"pl-k"],[19,23,"pl-c1"]],[[14,15,"pl-k"]],[[8,13,"pl-k"]],[[17,18,"pl-k"]],[[34,35,"pl-k"]],[[12,14,"pl-k"]],[],[[12,14,"pl-k"]],[],[[8,14,"pl-k"]],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,36,"pl-c"],[0,1,"pl-c"]],[[0,17,"pl-c"],[0,1,"pl-c"]],[[0,55,"pl-c"],[0,1,"pl-c"]],[[0,24,"pl-c"],[0,1,"pl-c"]],[[0,26,"pl-c"],[0,1,"pl-c"]],[[0,28,"pl-c"],[0,1,"pl-c"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,7,"pl-k"],[8,18,"pl-en"],[19,23,"pl-smi"],[19,23,"pl-smi"],[25,29,"pl-smi"]],[[8,10,"pl-k"],[11,14,"pl-k"]],[[12,18,"pl-k"],[19,23,"pl-c1"]],[[8,12,"pl-c1"]],[[30,31,"pl-k"]],[[8,12,"pl-c1"]],[[8,14,"pl-k"]],[[0,3,"pl-s"]],[],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,36,"pl-c"],[0,1,"pl-c"]],[[0,17,"pl-c"],[0,1,"pl-c"]],[[0,55,"pl-c"],[0,1,"pl-c"]],[[0,24,"pl-c"],[0,1,"pl-c"]],[[0,26,"pl-c"],[0,1,"pl-c"]],[[0,28,"pl-c"],[0,1,"pl-c"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,7,"pl-k"],[8,18,"pl-en"],[19,23,"pl-smi"],[19,23,"pl-smi"],[25,29,"pl-smi"]],[[8,10,"pl-k"],[11,14,"pl-k"]],[[12,18,"pl-k"],[19,23,"pl-c1"]],[[14,15,"pl-k"]],[[8,13,"pl-k"]],[[17,18,"pl-k"]],[[12,14,"pl-k"]],[],[[34,35,"pl-k"]],[[12,14,"pl-k"]],[],[[8,14,"pl-k"]],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,36,"pl-c"],[0,1,"pl-c"]],[[0,17,"pl-c"],[0,1,"pl-c"]],[[0,55,"pl-c"],[0,1,"pl-c"]],[[0,24,"pl-c"],[0,1,"pl-c"]],[[0,26,"pl-c"],[0,1,"pl-c"]],[[0,28,"pl-c"],[0,1,"pl-c"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,7,"pl-k"],[8,18,"pl-en"],[19,23,"pl-smi"],[19,23,"pl-smi"],[25,29,"pl-smi"]],[[8,10,"pl-k"],[11,14,"pl-k"]],[[12,18,"pl-k"],[19,23,"pl-c1"]],[[8,12,"pl-c1"]],[[8,12,"pl-c1"]],[[30,31,"pl-k"]],[[8,14,"pl-k"]],[[0,3,"pl-s"]],[],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,36,"pl-c"],[0,1,"pl-c"]],[[0,17,"pl-c"],[0,1,"pl-c"]],[[0,55,"pl-c"],[0,1,"pl-c"]],[[0,24,"pl-c"],[0,1,"pl-c"]],[[0,26,"pl-c"],[0,1,"pl-c"]],[[0,28,"pl-c"],[0,1,"pl-c"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,7,"pl-k"],[8,18,"pl-en"],[19,23,"pl-smi"],[19,23,"pl-smi"],[25,29,"pl-smi"]],[[8,10,"pl-k"],[11,14,"pl-k"]],[[12,18,"pl-k"],[19,23,"pl-c1"]],[[14,15,"pl-k"]],[[8,13,"pl-k"]],[[17,18,"pl-k"]],[[12,14,"pl-k"]],[],[[12,14,"pl-k"]],[],[[34,35,"pl-k"]],[],[[8,14,"pl-k"]],[[0,3,"pl-s"]],[],[],[],[],[],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,36,"pl-c"],[0,1,"pl-c"]],[[0,17,"pl-c"],[0,1,"pl-c"]],[[0,55,"pl-c"],[0,1,"pl-c"]],[[0,24,"pl-c"],[0,1,"pl-c"]],[[0,26,"pl-c"],[0,1,"pl-c"]],[[0,28,"pl-c"],[0,1,"pl-c"]],[[0,5,"pl-k"],[6,14,"pl-en"]],[[4,7,"pl-k"],[8,18,"pl-en"],[19,23,"pl-smi"],[19,23,"pl-smi"],[25,29,"pl-smi"]],[[8,10,"pl-k"],[11,14,"pl-k"]],[[12,18,"pl-k"],[19,23,"pl-c1"]],[],[[14,15,"pl-k"]],[[8,13,"pl-k"]],[[12,15,"pl-k"],[18,20,"pl-k"],[21,26,"pl-c1"],[27,30,"pl-c1"]],[[21,22,"pl-k"]],[[38,39,"pl-k"]],[[16,18,"pl-k"]],[[16,18,"pl-k"]],[[8,14,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,7,"pl-mh"],[4,7,"pl-en"]],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,4,"pl-k"],[5,15,"pl-en"],[16,20,"pl-v"],[22,30,"pl-v"],[33,41,"pl-v"]],[[4,6,"pl-k"],[15,18,"pl-c1"]],[[8,14,"pl-k"],[15,18,"pl-c1"]],[],[[9,13,"pl-smi"],[20,25,"pl-smi"],[33,38,"pl-smi"],[45,49,"pl-smi"],[53,57,"pl-c"],[53,55,"pl-c"]],[],[[4,14,"pl-c1"],[20,24,"pl-smi"]],[[4,14,"pl-c1"],[20,25,"pl-smi"]],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,4,"pl-k"],[5,15,"pl-en"],[16,20,"pl-v"],[22,30,"pl-v"],[33,41,"pl-v"]],[[4,6,"pl-k"],[15,18,"pl-c1"]],[[8,14,"pl-k"]],[],[],[[4,14,"pl-c1"],[20,24,"pl-smi"],[30,37,"pl-c"],[30,32,"pl-c"]],[[4,14,"pl-c1"],[20,25,"pl-smi"],[30,37,"pl-c"],[30,32,"pl-c"]],[[9,13,"pl-smi"],[20,25,"pl-smi"],[33,38,"pl-smi"],[45,49,"pl-smi"],[53,57,"pl-c"],[53,55,"pl-c"]],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,4,"pl-k"],[5,15,"pl-en"],[16,20,"pl-v"],[22,30,"pl-v"],[33,41,"pl-v"]],[[4,9,"pl-smi"],[10,12,"pl-k"]],[[4,8,"pl-smi"],[9,11,"pl-k"]],[[4,7,"pl-k"],[16,19,"pl-c1"],[23,26,"pl-c1"],[36,37,"pl-c1"]],[[8,11,"pl-k"],[20,23,"pl-c1"]],[[17,21,"pl-smi"],[28,33,"pl-smi"],[41,46,"pl-smi"],[53,57,"pl-smi"],[61,65,"pl-c"],[61,63,"pl-c"]],[[20,26,"pl-c1"]],[[24,28,"pl-smi"]],[],[[21,24,"pl-c1"],[32,33,"pl-c1"]],[[23,26,"pl-c1"],[34,35,"pl-c1"]],[[20,25,"pl-smi"]],[],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,4,"pl-k"],[5,15,"pl-en"],[16,20,"pl-v"],[22,30,"pl-v"],[33,41,"pl-v"]],[[4,9,"pl-smi"],[10,12,"pl-k"]],[[4,8,"pl-smi"],[9,11,"pl-k"]],[[4,7,"pl-k"],[8,12,"pl-smi"]],[[4,7,"pl-k"],[16,19,"pl-c1"],[23,26,"pl-c1"],[36,37,"pl-c1"]],[[8,11,"pl-k"],[20,23,"pl-c1"]],[[20,26,"pl-c1"]],[[24,28,"pl-smi"]],[],[[21,24,"pl-c1"],[32,33,"pl-c1"]],[[23,26,"pl-c1"],[34,35,"pl-c1"]],[[8,10,"pl-k"],[16,21,"pl-smi"],[25,28,"pl-c1"],[37,42,"pl-smi"]],[[17,21,"pl-smi"],[28,33,"pl-smi"],[41,46,"pl-smi"],[53,57,"pl-smi"],[62,66,"pl-c"],[62,64,"pl-c"]],[],[[19,22,"pl-c1"]],[[10,14,"pl-k"]],[[20,26,"pl-c1"]],[[24,29,"pl-smi"]],[],[],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,4,"pl-k"],[5,15,"pl-en"],[16,20,"pl-v"],[22,30,"pl-v"],[33,41,"pl-v"]],[[4,6,"pl-k"],[15,18,"pl-c1"]],[[8,14,"pl-k"]],[],[[4,9,"pl-smi"],[10,12,"pl-k"],[18,21,"pl-c1"]],[[4,8,"pl-smi"],[9,11,"pl-k"]],[[10,18,"pl-c1"]],[[4,7,"pl-k"],[14,17,"pl-c1"],[22,23,"pl-c1"]],[[8,14,"pl-smi"],[15,17,"pl-k"],[24,27,"pl-c1"]],[[8,11,"pl-k"],[12,13,"pl-smi"],[14,16,"pl-k"],[17,18,"pl-c1"]],[[12,13,"pl-smi"],[14,16,"pl-k"],[23,29,"pl-c1"],[36,41,"pl-c1"]],[[14,18,"pl-smi"],[22,27,"pl-smi"],[32,37,"pl-smi"],[41,45,"pl-smi"],[49,53,"pl-c"],[49,51,"pl-c"]],[[12,14,"pl-k"],[17,21,"pl-smi"],[25,28,"pl-c1"]],[[22,30,"pl-c1"],[33,37,"pl-smi"]],[],[[12,14,"pl-k"],[17,22,"pl-smi"],[26,29,"pl-c1"]],[[22,30,"pl-c1"],[33,38,"pl-smi"]],[],[],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[],[[0,3,"pl-s"],[3,13,"pl-en"]],[[0,3,"pl-k"],[4,14,"pl-en"],[15,16,"pl-k"],[17,25,"pl-k"],[26,30,"pl-smi"]],[[4,11,"pl-c"],[4,6,"pl-c"]],[[4,6,"pl-k"],[8,9,"pl-k"]],[[8,14,"pl-k"],[15,19,"pl-c1"]],[],[[4,13,"pl-c"],[4,6,"pl-c"]],[[4,9,"pl-k"],[10,19,"pl-c1"],[20,21,"pl-k"],[22,26,"pl-smi"],[27,32,"pl-c1"]],[[4,8,"pl-smi"],[9,14,"pl-c1"],[15,16,"pl-k"],[17,27,"pl-en"],[28,32,"pl-smi"],[33,37,"pl-c1"]],[[4,8,"pl-smi"],[9,13,"pl-c1"],[14,15,"pl-k"],[16,26,"pl-en"]],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,3,"pl-s"],[3,13,"pl-en"]],[[0,3,"pl-k"],[4,14,"pl-en"],[15,16,"pl-k"],[17,25,"pl-k"],[26,30,"pl-smi"]],[[4,17,"pl-c"],[4,6,"pl-c"]],[[4,9,"pl-k"],[10,20,"pl-c1"],[21,22,"pl-k"],[23,31,"pl-k"],[32,36,"pl-smi"],[38,42,"pl-smi"],[44,49,"pl-smi"]],[[8,11,"pl-k"],[17,18,"pl-k"]],[[13,14,"pl-k"]],[[14,15,"pl-k"]],[[8,12,"pl-smi"],[13,17,"pl-c1"],[18,19,"pl-k"]],[[8,12,"pl-smi"],[13,18,"pl-c1"],[19,20,"pl-k"]],[],[[4,18,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[14,15,"pl-k"]],[[4,6,"pl-k"],[12,15,"pl-k"],[16,20,"pl-c1"]],[[8,14,"pl-k"]],[],[[4,9,"pl-smi"],[10,14,"pl-c1"]],[[4,9,"pl-k"],[10,15,"pl-smi"],[16,22,"pl-c1"]],[[8,11,"pl-k"],[17,18,"pl-k"],[19,24,"pl-smi"],[25,28,"pl-c1"]],[[8,10,"pl-k"],[16,19,"pl-k"],[20,24,"pl-c1"]],[[12,40,"pl-c"],[12,14,"pl-c"]],[[12,16,"pl-smi"],[17,22,"pl-c1"],[23,25,"pl-k"],[26,31,"pl-smi"],[32,36,"pl-c1"],[37,41,"pl-smi"],[42,47,"pl-c1"]],[[12,16,"pl-smi"],[17,21,"pl-c1"],[22,24,"pl-k"],[25,30,"pl-smi"],[31,35,"pl-c1"],[36,40,"pl-smi"],[41,45,"pl-c1"]],[[12,17,"pl-smi"],[18,22,"pl-c1"]],[[12,17,"pl-smi"],[18,22,"pl-c1"],[23,27,"pl-c1"]],[[10,14,"pl-k"]],[[17,18,"pl-k"],[19,24,"pl-smi"],[25,28,"pl-c1"]],[[12,20,"pl-c"],[12,14,"pl-c"]],[[12,22,"pl-en"],[29,33,"pl-smi"],[34,38,"pl-c1"],[40,44,"pl-smi"],[45,50,"pl-c1"]],[],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,3,"pl-s"],[3,13,"pl-en"]],[[0,3,"pl-k"],[4,14,"pl-en"],[15,16,"pl-k"],[17,25,"pl-k"],[26,30,"pl-smi"]],[[4,17,"pl-c"],[4,6,"pl-c"]],[[4,9,"pl-k"],[10,20,"pl-c1"],[21,22,"pl-k"],[23,31,"pl-k"],[32,36,"pl-smi"],[38,42,"pl-smi"],[44,49,"pl-smi"]],[[8,11,"pl-k"],[17,18,"pl-k"]],[[13,14,"pl-k"]],[[14,15,"pl-k"]],[[8,12,"pl-smi"],[13,17,"pl-c1"],[18,19,"pl-k"]],[[8,12,"pl-smi"],[13,18,"pl-c1"],[19,20,"pl-k"]],[],[[4,12,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[14,15,"pl-k"]],[[4,6,"pl-k"],[12,15,"pl-k"],[16,20,"pl-c1"]],[[8,14,"pl-k"]],[],[[4,9,"pl-smi"],[10,14,"pl-c1"]],[[4,9,"pl-k"],[10,15,"pl-smi"],[16,22,"pl-c1"]],[[8,11,"pl-k"],[19,20,"pl-k"],[21,26,"pl-smi"],[27,33,"pl-c1"]],[[8,13,"pl-k"],[20,22,"pl-k"]],[[12,15,"pl-k"],[21,22,"pl-k"],[23,28,"pl-smi"],[29,34,"pl-c1"]],[[12,20,"pl-c"],[12,14,"pl-c"]],[[12,22,"pl-en"],[29,33,"pl-smi"],[34,38,"pl-c1"],[40,44,"pl-smi"],[45,50,"pl-c1"]],[[12,16,"pl-smi"],[17,21,"pl-c1"],[22,24,"pl-k"],[25,30,"pl-smi"],[31,35,"pl-c1"],[36,40,"pl-smi"],[41,45,"pl-c1"]],[[12,16,"pl-smi"],[17,22,"pl-c1"],[23,25,"pl-k"],[26,31,"pl-smi"],[32,36,"pl-c1"],[37,41,"pl-smi"],[42,47,"pl-c1"]],[],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,13,"pl-en"]],[[0,12,"pl-c"],[0,2,"pl-c"]],[[0,8,"pl-k"],[20,24,"pl-v"],[24,25,"pl-k"],[26,34,"pl-en"],[35,36,"pl-k"],[37,41,"pl-c1"],[42,43,"pl-k"],[44,52,"pl-en"],[53,54,"pl-k"],[55,59,"pl-c1"]],[[4,6,"pl-k"],[8,12,"pl-c1"],[13,16,"pl-k"],[17,21,"pl-c1"],[23,29,"pl-k"],[30,34,"pl-c1"]],[[4,7,"pl-k"],[16,17,"pl-k"],[18,26,"pl-en"],[27,28,"pl-k"],[29,33,"pl-c1"],[34,35,"pl-k"],[36,40,"pl-c1"],[41,45,"pl-c1"]],[[4,8,"pl-c1"],[9,13,"pl-c1"],[14,15,"pl-k"],[16,20,"pl-c1"],[21,26,"pl-c1"]],[[4,8,"pl-c1"],[9,14,"pl-c1"],[15,16,"pl-k"],[17,25,"pl-smi"]],[[4,14,"pl-en"],[15,19,"pl-c1"],[20,24,"pl-c1"]],[[4,14,"pl-en"],[15,19,"pl-c1"],[20,25,"pl-c1"]],[[4,10,"pl-k"],[11,15,"pl-c1"]],[],[],[[0,12,"pl-c"],[0,2,"pl-c"]],[[0,8,"pl-k"],[20,24,"pl-v"],[24,25,"pl-k"],[26,34,"pl-en"],[35,36,"pl-k"],[37,41,"pl-c1"],[42,43,"pl-k"],[44,52,"pl-en"],[53,54,"pl-k"],[55,59,"pl-c1"]],[[4,6,"pl-k"],[8,12,"pl-c1"],[13,16,"pl-k"],[17,21,"pl-c1"],[23,29,"pl-k"],[30,34,"pl-c1"]],[[4,14,"pl-en"],[15,19,"pl-c1"],[20,24,"pl-c1"]],[[4,14,"pl-en"],[15,19,"pl-c1"],[20,25,"pl-c1"]],[[4,7,"pl-k"],[16,17,"pl-k"],[18,26,"pl-en"],[27,28,"pl-k"],[29,33,"pl-c1"],[34,35,"pl-k"],[36,40,"pl-c1"],[41,45,"pl-c1"]],[[4,8,"pl-c1"],[9,13,"pl-c1"],[14,15,"pl-k"],[16,20,"pl-c1"],[21,26,"pl-c1"]],[[4,8,"pl-c1"],[9,14,"pl-c1"],[15,16,"pl-k"],[17,25,"pl-smi"]],[[4,10,"pl-k"],[11,15,"pl-c1"]],[],[],[[0,12,"pl-c"],[0,2,"pl-c"]],[[0,8,"pl-k"],[20,24,"pl-v"],[24,25,"pl-k"],[26,34,"pl-en"],[35,36,"pl-k"],[37,41,"pl-c1"],[42,43,"pl-k"],[44,52,"pl-en"],[53,54,"pl-k"],[55,59,"pl-c1"]],[[4,6,"pl-k"],[8,12,"pl-c1"],[13,16,"pl-k"],[17,21,"pl-c1"],[23,29,"pl-k"],[30,34,"pl-c1"]],[[4,14,"pl-en"],[15,19,"pl-c1"],[20,24,"pl-c1"]],[[4,7,"pl-k"],[16,17,"pl-k"],[18,26,"pl-en"],[27,28,"pl-k"],[29,33,"pl-c1"],[34,35,"pl-k"],[36,40,"pl-c1"],[41,45,"pl-c1"]],[[4,8,"pl-c1"],[9,13,"pl-c1"],[14,15,"pl-k"],[16,20,"pl-c1"],[21,26,"pl-c1"]],[[4,8,"pl-c1"],[9,14,"pl-c1"],[15,16,"pl-k"],[17,25,"pl-smi"]],[[4,47,"pl-c"],[4,6,"pl-c"]],[[4,14,"pl-en"],[15,19,"pl-c1"],[20,24,"pl-c1"]],[[4,10,"pl-k"],[11,15,"pl-c1"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,13,"pl-en"]],[[0,15,"pl-c"],[0,2,"pl-c"]],[[0,8,"pl-k"],[20,24,"pl-v"],[24,25,"pl-k"],[26,34,"pl-en"],[35,36,"pl-k"],[37,41,"pl-c1"],[42,43,"pl-k"],[44,52,"pl-en"],[53,54,"pl-k"],[55,59,"pl-c1"]],[[4,7,"pl-k"],[19,20,"pl-k"],[21,29,"pl-en"],[32,33,"pl-k"]],[[4,7,"pl-k"],[15,16,"pl-k"],[17,25,"pl-en"]],[[16,17,"pl-k"],[18,26,"pl-en"],[27,28,"pl-k"],[29,33,"pl-c1"]],[[4,6,"pl-k"],[8,12,"pl-c1"],[13,16,"pl-k"],[17,21,"pl-c1"],[23,34,"pl-smi"],[35,39,"pl-c1"],[40,44,"pl-c1"]],[[4,9,"pl-k"],[11,22,"pl-smi"],[23,29,"pl-c1"],[30,31,"pl-k"],[32,33,"pl-c1"]],[[8,15,"pl-smi"],[16,17,"pl-k"],[18,29,"pl-smi"],[30,33,"pl-c1"],[35,36,"pl-k"]],[[8,31,"pl-c"],[8,10,"pl-c"]],[[8,10,"pl-k"],[12,19,"pl-smi"],[20,25,"pl-c1"],[27,38,"pl-smi"],[39,43,"pl-c1"],[44,51,"pl-smi"],[52,57,"pl-c1"]],[[8,10,"pl-k"],[12,19,"pl-smi"],[20,24,"pl-c1"],[26,37,"pl-smi"],[38,42,"pl-c1"],[43,50,"pl-smi"],[51,55,"pl-c1"]],[[8,16,"pl-smi"],[17,18,"pl-k"],[19,26,"pl-smi"],[27,31,"pl-c1"]],[[8,15,"pl-smi"],[16,20,"pl-c1"],[21,22,"pl-k"],[23,30,"pl-smi"],[31,36,"pl-c1"]],[[8,15,"pl-smi"],[16,21,"pl-c1"],[22,23,"pl-k"],[24,32,"pl-smi"]],[],[[4,10,"pl-k"],[11,15,"pl-c1"]],[],[],[[0,22,"pl-c"],[0,2,"pl-c"]],[[0,8,"pl-k"],[20,24,"pl-v"],[24,25,"pl-k"],[26,34,"pl-en"],[35,36,"pl-k"],[37,41,"pl-c1"],[42,43,"pl-k"],[44,52,"pl-en"],[53,54,"pl-k"],[55,59,"pl-c1"]],[[4,7,"pl-k"],[19,20,"pl-k"],[22,30,"pl-en"],[31,32,"pl-k"],[33,37,"pl-c1"],[41,42,"pl-k"]],[[4,7,"pl-k"],[15,16,"pl-k"],[17,25,"pl-en"],[26,27,"pl-k"],[28,32,"pl-c1"]],[[16,17,"pl-k"],[18,26,"pl-en"],[27,28,"pl-k"],[29,33,"pl-c1"]],[[4,6,"pl-k"],[8,12,"pl-c1"],[13,16,"pl-k"],[17,21,"pl-c1"],[23,34,"pl-smi"],[35,39,"pl-c1"],[40,44,"pl-c1"]],[[4,9,"pl-k"],[11,22,"pl-smi"],[23,29,"pl-c1"],[30,31,"pl-k"],[32,33,"pl-c1"]],[[8,15,"pl-smi"],[16,17,"pl-k"],[18,29,"pl-smi"],[30,33,"pl-c1"]],[[8,10,"pl-k"],[12,19,"pl-smi"],[20,23,"pl-k"],[24,28,"pl-c1"]],[[12,14,"pl-k"],[16,23,"pl-smi"],[24,29,"pl-c1"],[30,33,"pl-k"],[34,38,"pl-c1"],[40,51,"pl-smi"],[52,56,"pl-c1"],[57,64,"pl-smi"],[65,70,"pl-c1"]],[[12,23,"pl-smi"],[24,28,"pl-c1"],[29,36,"pl-smi"]],[[12,23,"pl-smi"],[24,28,"pl-c1"],[29,33,"pl-c1"]],[[12,14,"pl-k"],[16,23,"pl-smi"],[24,28,"pl-c1"],[29,32,"pl-k"],[33,37,"pl-c1"],[39,50,"pl-smi"],[51,55,"pl-c1"],[56,63,"pl-smi"],[64,68,"pl-c1"]],[[10,14,"pl-k"]],[[12,19,"pl-smi"],[20,21,"pl-k"],[22,33,"pl-smi"],[34,37,"pl-c1"],[39,40,"pl-k"]],[[12,20,"pl-smi"],[21,22,"pl-k"],[23,30,"pl-smi"],[31,35,"pl-c1"]],[[12,19,"pl-smi"],[20,24,"pl-c1"],[25,26,"pl-k"],[27,34,"pl-smi"],[35,40,"pl-c1"]],[[12,19,"pl-smi"],[20,25,"pl-c1"],[26,27,"pl-k"],[28,36,"pl-smi"]],[],[],[[4,10,"pl-k"],[11,15,"pl-c1"]],[],[],[[0,22,"pl-c"],[0,2,"pl-c"]],[[0,8,"pl-k"],[20,24,"pl-v"],[24,25,"pl-k"],[26,34,"pl-en"],[35,36,"pl-k"],[37,41,"pl-c1"],[42,43,"pl-k"],[44,52,"pl-en"],[53,54,"pl-k"],[55,59,"pl-c1"]],[[4,7,"pl-k"],[19,20,"pl-k"],[22,30,"pl-en"],[31,32,"pl-k"],[33,37,"pl-c1"],[41,42,"pl-k"]],[[4,7,"pl-k"],[15,16,"pl-k"],[17,25,"pl-en"],[26,27,"pl-k"],[28,32,"pl-c1"]],[[16,17,"pl-k"],[18,26,"pl-en"],[27,28,"pl-k"],[29,33,"pl-c1"]],[[4,6,"pl-k"],[8,12,"pl-c1"],[13,16,"pl-k"],[17,21,"pl-c1"],[23,34,"pl-smi"],[35,39,"pl-c1"],[40,44,"pl-c1"]],[[4,9,"pl-k"],[11,22,"pl-smi"],[23,29,"pl-c1"],[30,31,"pl-k"],[32,33,"pl-c1"]],[[8,15,"pl-smi"],[16,17,"pl-k"],[18,29,"pl-smi"],[30,33,"pl-c1"]],[[8,10,"pl-k"],[12,19,"pl-smi"],[20,23,"pl-k"],[24,28,"pl-c1"]],[[12,23,"pl-smi"],[24,28,"pl-c1"],[29,36,"pl-smi"]],[[12,23,"pl-smi"],[24,28,"pl-c1"],[29,33,"pl-c1"]],[[12,14,"pl-k"],[16,23,"pl-smi"],[24,29,"pl-c1"],[30,33,"pl-k"],[34,38,"pl-c1"],[40,51,"pl-smi"],[52,56,"pl-c1"],[57,64,"pl-smi"],[65,70,"pl-c1"]],[[12,14,"pl-k"],[16,23,"pl-smi"],[24,28,"pl-c1"],[29,32,"pl-k"],[33,37,"pl-c1"],[39,50,"pl-smi"],[51,55,"pl-c1"],[56,63,"pl-smi"],[64,68,"pl-c1"]],[[10,14,"pl-k"]],[[12,19,"pl-smi"],[20,21,"pl-k"],[22,33,"pl-smi"],[34,37,"pl-c1"],[39,40,"pl-k"]],[[12,20,"pl-smi"],[21,22,"pl-k"],[23,30,"pl-smi"],[31,35,"pl-c1"]],[[12,19,"pl-smi"],[20,24,"pl-c1"],[25,26,"pl-k"],[27,34,"pl-smi"],[35,40,"pl-c1"]],[[12,19,"pl-smi"],[20,25,"pl-c1"],[26,27,"pl-k"],[28,36,"pl-smi"]],[],[],[[4,10,"pl-k"],[11,15,"pl-c1"]],[],[],[[0,16,"pl-c"],[0,2,"pl-c"]],[[0,8,"pl-k"],[20,24,"pl-v"],[24,25,"pl-k"],[26,34,"pl-en"],[35,36,"pl-k"],[37,41,"pl-c1"],[42,43,"pl-k"],[44,52,"pl-en"],[53,54,"pl-k"],[55,59,"pl-c1"]],[[4,9,"pl-k"],[4,9,"pl-k"],[21,22,"pl-k"],[23,31,"pl-en"],[34,35,"pl-k"]],[[4,7,"pl-k"],[15,16,"pl-k"],[17,25,"pl-en"]],[[16,17,"pl-k"],[18,26,"pl-en"],[27,28,"pl-k"],[29,33,"pl-c1"]],[[4,6,"pl-k"],[8,12,"pl-c1"],[13,16,"pl-k"],[17,21,"pl-c1"],[23,34,"pl-smi"],[35,39,"pl-c1"],[40,44,"pl-c1"]],[[4,9,"pl-k"],[11,22,"pl-smi"],[23,29,"pl-c1"],[30,31,"pl-k"],[32,33,"pl-c1"]],[[8,11,"pl-k"],[13,16,"pl-k"],[19,20,"pl-k"],[21,22,"pl-c1"],[31,32,"pl-k"],[33,44,"pl-smi"],[45,51,"pl-c1"],[53,54,"pl-smi"],[55,56,"pl-k"],[57,63,"pl-smi"],[65,66,"pl-smi"],[66,68,"pl-k"]],[[12,19,"pl-smi"],[20,21,"pl-k"],[22,33,"pl-smi"],[34,39,"pl-c1"],[41,42,"pl-k"]],[[12,20,"pl-smi"],[21,22,"pl-k"],[23,30,"pl-smi"],[31,35,"pl-c1"]],[[12,19,"pl-smi"],[20,24,"pl-c1"],[25,26,"pl-k"],[27,34,"pl-smi"],[35,40,"pl-c1"]],[[12,19,"pl-smi"],[20,25,"pl-c1"],[26,27,"pl-k"],[28,36,"pl-smi"]],[[12,14,"pl-k"],[16,23,"pl-smi"],[24,28,"pl-c1"],[29,32,"pl-k"],[33,37,"pl-c1"],[39,50,"pl-smi"],[51,55,"pl-c1"],[56,63,"pl-smi"],[64,68,"pl-c1"]],[[12,14,"pl-k"],[16,23,"pl-smi"],[24,29,"pl-c1"],[30,33,"pl-k"],[34,38,"pl-c1"],[40,51,"pl-smi"],[52,56,"pl-c1"],[57,64,"pl-smi"],[65,70,"pl-c1"]],[],[],[[4,10,"pl-k"],[11,15,"pl-c1"]],[],[[0,3,"pl-s"]],[],[[0,6,"pl-mh"],[4,6,"pl-en"]],[],[],[[0,3,"pl-s"],[3,4,"pl-en"]],[[0,6,"pl-k"],[17,27,"pl-en"],[43,44,"pl-s"]],[],[],[],[[19,20,"pl-s"]],[],[],[],[],[],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,0,"pl-c1"]],[[0,10,"pl-c1"]],[[0,4,"pl-c1"]],[[0,51,"pl-c1"]],[[0,13,"pl-c1"]],[[0,20,"pl-c1"]],[[0,12,"pl-c1"]],[[0,88,"pl-c1"]],[[0,21,"pl-c1"]],[[0,12,"pl-c1"]],[[0,29,"pl-c1"]],[[0,19,"pl-c1"]],[[0,21,"pl-c1"]],[[0,16,"pl-c1"]],[[0,50,"pl-c1"]],[[0,19,"pl-c1"]],[[0,48,"pl-c1"]],[[0,33,"pl-c1"]],[[0,30,"pl-c1"]],[[0,25,"pl-c1"]],[[0,23,"pl-c1"]],[[0,44,"pl-c1"]],[[0,22,"pl-c1"]],[[0,43,"pl-c1"]],[[0,5,"pl-c1"]],[[0,16,"pl-c1"]],[[0,1,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,10,"pl-mh"],[4,10,"pl-en"]],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,10,"pl-c"],[0,2,"pl-c"]],[[0,4,"pl-k"],[5,15,"pl-en"],[16,17,"pl-en"],[18,22,"pl-smi"],[32,33,"pl-k"],[35,37,"pl-k"],[46,47,"pl-k"]],[[4,9,"pl-k"],[10,13,"pl-k"],[19,20,"pl-k"],[26,30,"pl-k"]],[[8,14,"pl-k"]],[],[[4,7,"pl-k"],[12,13,"pl-k"],[19,23,"pl-smi"]],[[9,13,"pl-smi"],[14,15,"pl-k"],[21,26,"pl-smi"]],[[9,14,"pl-smi"],[15,16,"pl-k"]],[[4,7,"pl-k"],[8,9,"pl-c1"],[10,11,"pl-k"],[12,22,"pl-c1"],[28,32,"pl-smi"]],[[4,7,"pl-k"],[8,9,"pl-c1"],[10,11,"pl-k"],[12,22,"pl-c1"],[28,33,"pl-smi"]],[[4,10,"pl-k"]],[],[],[[0,10,"pl-c"],[0,2,"pl-c"]],[[0,4,"pl-k"],[5,16,"pl-en"],[17,18,"pl-en"],[19,23,"pl-smi"],[33,34,"pl-k"],[36,38,"pl-k"],[47,48,"pl-k"]],[[4,9,"pl-k"],[10,13,"pl-k"],[19,20,"pl-k"],[26,30,"pl-k"]],[[8,14,"pl-k"],[15,18,"pl-c1"]],[],[[4,7,"pl-k"],[14,15,"pl-k"]],[[10,16,"pl-c1"]],[[4,9,"pl-k"],[10,11,"pl-k"],[17,24,"pl-c1"]],[[8,11,"pl-k"],[17,18,"pl-k"],[25,36,"pl-c1"]],[[8,11,"pl-k"],[16,17,"pl-k"],[23,27,"pl-smi"]],[[13,17,"pl-smi"],[18,19,"pl-k"],[25,30,"pl-smi"]],[[13,18,"pl-smi"],[19,20,"pl-k"]],[[8,10,"pl-k"],[11,14,"pl-k"],[20,21,"pl-k"]],[[18,24,"pl-c1"]],[],[[8,10,"pl-k"],[11,14,"pl-k"],[21,22,"pl-k"]],[[18,24,"pl-c1"]],[],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,4,"pl-k"],[5,15,"pl-en"],[16,17,"pl-en"],[18,22,"pl-smi"],[32,33,"pl-k"],[35,37,"pl-k"],[46,47,"pl-k"]],[[4,9,"pl-k"],[10,13,"pl-k"],[19,20,"pl-k"],[26,30,"pl-k"],[33,39,"pl-k"]],[[4,8,"pl-c1"],[9,10,"pl-k"],[15,19,"pl-smi"],[21,22,"pl-k"],[27,32,"pl-smi"]],[[4,5,"pl-c1"],[6,7,"pl-k"],[8,18,"pl-c1"],[24,28,"pl-smi"]],[[4,5,"pl-c1"],[6,7,"pl-k"],[8,18,"pl-c1"],[24,29,"pl-smi"]],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,4,"pl-k"],[5,15,"pl-en"],[16,17,"pl-en"],[18,22,"pl-smi"],[32,33,"pl-k"],[35,37,"pl-k"],[46,47,"pl-k"]],[[4,9,"pl-k"],[10,13,"pl-k"],[19,20,"pl-k"],[26,30,"pl-k"],[33,39,"pl-k"]],[[4,7,"pl-k"],[14,15,"pl-k"]],[[4,9,"pl-k"],[10,11,"pl-k"],[17,24,"pl-c1"]],[[8,13,"pl-k"],[14,17,"pl-k"],[23,24,"pl-k"],[31,38,"pl-c1"],[41,45,"pl-k"],[48,53,"pl-k"]],[[8,12,"pl-c1"],[13,14,"pl-k"],[19,23,"pl-smi"],[25,26,"pl-k"],[31,36,"pl-smi"]],[[8,10,"pl-k"],[11,14,"pl-k"],[20,21,"pl-k"],[40,46,"pl-c1"]],[[8,10,"pl-k"],[11,14,"pl-k"],[20,21,"pl-k"],[41,47,"pl-c1"]],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,4,"pl-k"],[5,15,"pl-en"],[16,17,"pl-en"],[18,22,"pl-smi"],[32,33,"pl-k"],[35,37,"pl-k"],[46,47,"pl-k"]],[[4,9,"pl-k"],[10,13,"pl-k"],[19,20,"pl-k"],[26,30,"pl-k"],[33,39,"pl-k"]],[[4,7,"pl-k"],[14,15,"pl-k"]],[[4,9,"pl-k"],[10,11,"pl-k"],[17,24,"pl-c1"]],[[8,11,"pl-k"],[18,19,"pl-k"],[26,31,"pl-c1"]],[[8,11,"pl-k"],[12,13,"pl-c1"],[14,16,"pl-k"],[17,18,"pl-c1"],[19,22,"pl-k"]],[[12,15,"pl-k"],[21,22,"pl-k"],[29,40,"pl-c1"]],[[12,16,"pl-c1"],[17,18,"pl-k"],[23,27,"pl-smi"],[29,30,"pl-k"],[35,40,"pl-smi"]],[[12,14,"pl-k"],[15,18,"pl-k"],[24,25,"pl-k"],[44,50,"pl-c1"]],[[12,14,"pl-k"],[15,18,"pl-k"],[24,25,"pl-k"],[45,51,"pl-c1"]],[],[],[[4,10,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,6,"pl-k"],[7,15,"pl-en"]],[[2,5,"pl-k"],[6,16,"pl-en"],[17,21,"pl-v"],[23,31,"pl-en"],[32,33,"pl-k"],[34,42,"pl-en"],[43,44,"pl-k"]],[[4,6,"pl-k"],[13,15,"pl-k"],[16,20,"pl-c1"],[22,28,"pl-k"]],[[4,9,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[8,15,"pl-en"],[16,20,"pl-v"],[22,30,"pl-en"],[31,32,"pl-k"],[33,37,"pl-en"],[38,39,"pl-k"]],[[6,8,"pl-k"],[15,17,"pl-k"],[18,22,"pl-c1"],[24,30,"pl-k"]],[[6,13,"pl-c"],[6,8,"pl-c"]],[[6,9,"pl-k"],[10,17,"pl-v"],[18,19,"pl-k"]],[[16,17,"pl-k"]],[[17,18,"pl-k"]],[],[],[],[],[],[],[],[[0,3,"pl-s"]],[],[],[[0,3,"pl-s"],[3,8,"pl-en"]],[[0,6,"pl-k"],[7,15,"pl-en"]],[[2,8,"pl-k"],[9,14,"pl-en"],[15,25,"pl-en"],[26,33,"pl-en"]],[[2,5,"pl-k"],[6,16,"pl-en"],[17,21,"pl-v"],[23,31,"pl-en"],[32,33,"pl-k"],[34,42,"pl-en"],[43,44,"pl-k"]],[[4,6,"pl-k"],[13,15,"pl-k"],[16,20,"pl-c1"],[22,28,"pl-k"]],[[4,7,"pl-k"],[8,13,"pl-v"],[14,15,"pl-k"],[24,29,"pl-en"],[30,38,"pl-en"]],[],[[4,9,"pl-k"],[11,12,"pl-k"]],[[6,9,"pl-k"],[10,13,"pl-v"],[14,15,"pl-k"]],[[6,9,"pl-k"],[13,15,"pl-k"],[16,17,"pl-c1"]],[[8,11,"pl-k"],[12,19,"pl-v"],[20,21,"pl-k"]],[[8,10,"pl-k"],[25,27,"pl-k"],[28,32,"pl-c1"]],[[8,10,"pl-k"],[26,28,"pl-k"],[29,33,"pl-c1"]],[[8,13,"pl-c"],[8,10,"pl-c"]],[[8,11,"pl-k"],[12,19,"pl-v"],[20,21,"pl-k"]],[[21,22,"pl-k"]],[[22,23,"pl-k"]],[],[],[],[],[],[[0,3,"pl-s"]],[],[[0,9,"pl-mh"],[4,9,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,4,"pl-k"],[5,13,"pl-en"]],[[4,13,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[8,10,"pl-k"],[11,22,"pl-en"],[23,27,"pl-smi"],[27,28,"pl-k"],[29,35,"pl-en"],[36,38,"pl-en"],[39,46,"pl-en"],[47,55,"pl-en"],[60,62,"pl-k"],[63,69,"pl-en"],[70,72,"pl-en"],[73,80,"pl-en"],[81,89,"pl-en"]],[[8,10,"pl-k"],[11,14,"pl-k"],[15,19,"pl-en"],[20,24,"pl-smi"],[26,27,"pl-k"],[28,32,"pl-smi"],[32,33,"pl-k"],[33,39,"pl-en"]],[[12,15,"pl-k"],[17,21,"pl-smi"],[23,28,"pl-smi"],[30,31,"pl-k"],[33,37,"pl-smi"],[37,38,"pl-k"],[38,44,"pl-en"],[46,47,"pl-k"],[51,52,"pl-k"],[52,57,"pl-en"],[61,65,"pl-smi"],[65,66,"pl-k"],[66,72,"pl-en"],[74,75,"pl-k"],[80,81,"pl-k"],[81,86,"pl-en"]],[[12,16,"pl-smi"],[16,17,"pl-k"],[17,27,"pl-en"],[29,30,"pl-k"],[35,36,"pl-k"],[37,41,"pl-c1"],[41,43,"pl-k"],[43,54,"pl-en"],[55,60,"pl-smi"]],[[12,16,"pl-smi"],[16,17,"pl-k"],[17,27,"pl-en"],[29,30,"pl-k"],[36,37,"pl-k"],[38,42,"pl-c1"],[42,44,"pl-k"],[44,55,"pl-en"],[56,60,"pl-smi"]],[],[[8,12,"pl-smi"]],[],[[4,13,"pl-c"],[4,6,"pl-c"]],[[4,7,"pl-k"],[8,10,"pl-k"],[11,22,"pl-en"],[23,27,"pl-smi"],[27,28,"pl-k"],[29,35,"pl-en"],[36,38,"pl-en"],[39,46,"pl-en"],[47,55,"pl-en"],[60,62,"pl-k"],[63,69,"pl-en"],[70,72,"pl-en"],[73,80,"pl-en"],[81,89,"pl-en"]],[[8,11,"pl-k"],[12,15,"pl-k"],[16,21,"pl-smi"],[22,23,"pl-k"],[24,28,"pl-en"],[29,33,"pl-smi"],[33,34,"pl-k"],[34,39,"pl-en"]],[[8,13,"pl-k"],[14,15,"pl-k"],[15,20,"pl-smi"],[20,21,"pl-k"],[21,29,"pl-en"]],[[12,14,"pl-k"],[15,18,"pl-k"],[19,23,"pl-en"],[24,28,"pl-smi"],[30,31,"pl-k"],[32,37,"pl-smi"],[37,38,"pl-k"],[38,41,"pl-en"],[43,44,"pl-k"],[44,50,"pl-en"]],[[16,19,"pl-k"],[21,25,"pl-smi"],[27,32,"pl-smi"],[34,35,"pl-k"],[37,41,"pl-smi"],[41,42,"pl-k"],[42,48,"pl-en"],[50,51,"pl-k"],[55,56,"pl-k"],[56,61,"pl-en"],[65,69,"pl-smi"],[69,70,"pl-k"],[70,76,"pl-en"],[78,79,"pl-k"],[84,85,"pl-k"],[85,90,"pl-en"]],[[16,21,"pl-smi"],[21,22,"pl-k"],[22,26,"pl-en"],[27,32,"pl-smi"],[32,33,"pl-k"],[33,38,"pl-en"]],[[16,21,"pl-smi"],[21,22,"pl-k"],[22,26,"pl-en"],[27,31,"pl-smi"],[31,32,"pl-k"],[32,37,"pl-en"]],[[16,20,"pl-smi"],[20,21,"pl-k"],[21,31,"pl-en"],[33,34,"pl-k"],[39,40,"pl-k"],[41,46,"pl-smi"]],[[16,20,"pl-smi"],[20,21,"pl-k"],[21,31,"pl-en"],[33,34,"pl-k"],[40,41,"pl-k"],[42,46,"pl-smi"]],[],[],[[8,12,"pl-smi"]],[],[],[[0,3,"pl-s"]],[],[[0,7,"pl-mh"],[4,7,"pl-en"]],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,4,"pl-c"],[0,2,"pl-c"]],[[0,0,"pl-c"],[0,6,"pl-k"],[7,12,"pl-k"],[13,21,"pl-en"]],[[4,10,"pl-k"],[11,19,"pl-en"],[20,30,"pl-en"],[31,39,"pl-en"],[40,44,"pl-en"]],[[4,6,"pl-k"],[8,12,"pl-smi"],[13,15,"pl-k"],[16,20,"pl-c1"],[22,28,"pl-k"],[29,33,"pl-smi"]],[],[[4,8,"pl-en"],[9,13,"pl-smi"]],[[4,14,"pl-en"],[15,19,"pl-smi"],[20,24,"pl-smi"]],[[4,14,"pl-en"],[15,19,"pl-smi"],[20,25,"pl-smi"]],[[4,10,"pl-k"],[11,15,"pl-smi"]],[],[],[[4,10,"pl-k"],[11,15,"pl-k"],[16,20,"pl-en"],[21,29,"pl-en"],[30,34,"pl-en"]],[[8,16,"pl-smi"],[17,21,"pl-smi"],[22,23,"pl-k"],[24,28,"pl-smi"],[29,33,"pl-smi"]],[[8,12,"pl-smi"],[13,17,"pl-smi"],[18,19,"pl-k"],[20,24,"pl-smi"],[25,30,"pl-smi"]],[[8,12,"pl-smi"],[13,18,"pl-smi"],[19,20,"pl-k"],[21,25,"pl-smi"]],[],[],[[0,3,"pl-s"]],[],[[0,3,"pl-s"],[3,9,"pl-en"]],[[0,4,"pl-c"],[0,2,"pl-c"]],[[0,0,"pl-c"],[0,6,"pl-k"],[7,12,"pl-k"],[13,21,"pl-en"]],[[0,6,"pl-k"],[7,15,"pl-en"],[16,26,"pl-en"],[27,35,"pl-en"],[36,40,"pl-en"]],[[4,6,"pl-k"],[7,11,"pl-smi"],[12,14,"pl-k"],[15,19,"pl-c1"],[21,27,"pl-k"],[28,32,"pl-smi"]],[[10,14,"pl-smi"],[20,25,"pl-smi"],[27,28,"pl-k"],[30,34,"pl-smi"],[35,40,"pl-smi"],[42,46,"pl-smi"],[47,51,"pl-smi"]],[[4,14,"pl-en"],[15,19,"pl-smi"],[20,24,"pl-smi"]],[[4,14,"pl-en"],[15,19,"pl-smi"],[20,25,"pl-smi"]],[[4,10,"pl-k"],[11,15,"pl-smi"]],[],[],[[0,3,"pl-s"]],[],[],[[1,2,"pl-ent"],[3,8,"pl-e"],[9,10,"pl-s"],[10,16,"pl-s"],[16,17,"pl-s"]],[[1,2,"pl-ent"],[3,7,"pl-e"],[8,9,"pl-s"],[9,52,"pl-s"],[52,53,"pl-s"],[54,60,"pl-e"],[61,62,"pl-s"],[62,68,"pl-s"],[68,69,"pl-s"]],[[3,6,"pl-ent"],[7,10,"pl-e"],[11,12,"pl-s"],[12,32,"pl-s"],[32,33,"pl-s"],[34,39,"pl-e"],[40,41,"pl-s"],[41,45,"pl-s"],[45,46,"pl-s"]],[[2,3,"pl-ent"]]],"colorizedLines":null}},"title":"leetcode-master/problems/0226.翻转二叉树.md at master · feinan/leetcode-master","appPayload":{},"meta":{"title":"leetcode-master/problems/0226.翻转二叉树.md at master · feinan/leetcode-master"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/feinan/leetcode-master" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B CopilotSidePanelSidebar-module__SidePanel__L3O0C CopilotSidePanelSidebar-module__HiddenSidePanel__TBRGn" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HideTree__AYZnm ReposFileTreePane-module__HidePane__VHAVt" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="react-code-view-header-wrap--narrow CodeViewHeader-module__Box_3__q1zUL"><div class="CodeViewHeader-module__treeToggleWrapper__RQ__9"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow CodeViewHeader-module__Box_5__MQ0hL"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/feinan/leetcode-master/tree/master" data-discover="true">leetcode-master</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/feinan/leetcode-master/tree/master/problems" data-discover="true">problems</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">0226.翻转二叉树.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div><div class="CodeViewHeader-module__FileResultsList__JDzUy"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_5ipla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_5ipla9lik5_ _R_5ipla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_5ipla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4pla9lik5_" id="_R_14pla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4pla9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4tla9lik5_" id="_R_14tla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4tla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/feinan/leetcode-master/commits/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/feinan/leetcode-master/commits/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="29.2 KB" style="--truncate-max-width:100%"><span>1035 lines (890 loc) · 29.2 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_1__Hazu5"><div class="FileNameStickyHeader-module__Box_2__hoolP"><div class="FileNameStickyHeader-module__Box_3__MVKsk"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="FileNameStickyHeader-module__Box_4__FLhtt"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/feinan/leetcode-master/tree/master" data-discover="true">leetcode-master</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/feinan/leetcode-master/tree/master/problems" data-discover="true">problems</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">0226.翻转二叉树.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="29.2 KB" style="--truncate-max-width:100%"><span>1035 lines (890 loc) · 29.2 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/feinan/leetcode-master/raw/refs/heads/master/problems/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 TableOfContents-module__IconButton__jrlNM prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq BlobContent-module__blobContentSectionMarkdown__mPLOK" style="margin-top:46px"><div class="js-snippet-clipboard-copy-unpositioned BlobContent-module__markdownBlob__T8jpG" data-hpc="true" containertiming="hpc"><article class="markdown-body entry-content container-lg" itemprop="text"><p align="center" dir="auto">
<a href="https://www.programmercarl.com/xunlian/xunlianying.html" rel="nofollow">
  <img src="/feinan/leetcode-master/raw/master/pics/训练营.png" width="1000" style="max-width: 100%;">
</a>
</p><p align="center" dir="auto"><strong><a href="/feinan/leetcode-master/blob/master/problems/qita/join.md">参与本项目</a>，贡献其他语言版本的代码，拥抱开源，让更多学习算法的小伙伴们受益！</strong></p>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">226.翻转二叉树</h1><a id="user-content-226翻转二叉树" class="anchor" aria-label="Permalink: 226.翻转二叉树" href="#226翻转二叉树"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><a href="https://leetcode.cn/problems/invert-binary-tree/" rel="nofollow">力扣题目链接</a></p>
<p dir="auto">翻转一棵二叉树。</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b06742f6fb7d026879d57d3a7f7d6294e6784e6d43763a771cb425a4a679ddb6/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303230333139323634343332392e706e67"><img src="https://camo.githubusercontent.com/b06742f6fb7d026879d57d3a7f7d6294e6784e6d43763a771cb425a4a679ddb6/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303230333139323634343332392e706e67" alt="226.翻转二叉树" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/20210203192644329.png" style="max-width: 100%;"></a></p>
<p dir="auto">这道题目背后有一个让程序员心酸的故事，听说 Homebrew的作者Max Howell，就是因为没在白板上写出翻转二叉树，最后被Google拒绝了。（真假不做判断，权当一个乐子哈）</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">算法公开课</h2><a id="user-content-算法公开课" class="anchor" aria-label="Permalink: 算法公开课" href="#算法公开课"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><strong><a href="https://programmercarl.com/other/gongkaike.html" rel="nofollow">《代码随想录》算法视频公开课</a>：<a href="https://www.bilibili.com/video/BV1sP4y1f7q7" rel="nofollow">听说一位巨佬面Google被拒了，因为没写出翻转二叉树 | LeetCode：226.翻转二叉树</a>，相信结合视频再看本篇题解，更有助于大家对本题的理解</strong>。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">题外话</h2><a id="user-content-题外话" class="anchor" aria-label="Permalink: 题外话" href="#题外话"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">这道题目是非常经典的题目，也是比较简单的题目（至少一看就会）。</p>
<p dir="auto">但正是因为这道题太简单，一看就会，一些同学都没有抓住起本质，稀里糊涂的就把这道题目过了。</p>
<p dir="auto">如果做过这道题的同学也建议认真看完，相信一定有所收获！</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">思路</h2><a id="user-content-思路" class="anchor" aria-label="Permalink: 思路" href="#思路"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">我们之前介绍的都是各种方式遍历二叉树，这次要翻转了，感觉还是有点懵逼。</p>
<p dir="auto">这得怎么翻转呢？</p>
<p dir="auto">如果要从整个树来看，翻转还真的挺复杂，整个树以中间分割线进行翻转，如图：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0d24faf67ce1b9af3a2d16aa22c929a3052320fc092d63241542fc4a0c25195d/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303230333139323732343335312e706e67"><img src="https://camo.githubusercontent.com/0d24faf67ce1b9af3a2d16aa22c929a3052320fc092d63241542fc4a0c25195d/68747470733a2f2f636f64652d7468696e6b696e672d313235333835353039332e66696c652e6d7971636c6f75642e636f6d2f706963732f32303231303230333139323732343335312e706e67" alt="226.翻转二叉树1" data-canonical-src="https://code-thinking-1253855093.file.myqcloud.com/pics/20210203192724351.png" style="max-width: 100%;"></a></p>
<p dir="auto">可以发现想要翻转它，其实就把每一个节点的左右孩子交换一下就可以了。</p>
<p dir="auto">关键在于遍历顺序，前中后序应该选哪一种遍历顺序？ （一些同学这道题都过了，但是不知道自己用的是什么顺序）</p>
<p dir="auto">遍历的过程中去翻转每一个节点的左右孩子就可以达到整体翻转的效果。</p>
<p dir="auto"><strong>注意只要把每一个节点的左右孩子翻转一下，就可以达到整体翻转的效果</strong></p>
<p dir="auto"><strong>这道题目使用前序遍历和后序遍历都可以，唯独中序遍历不方便，因为中序遍历会把某些节点的左右孩子翻转了两次！建议拿纸画一画，就理解了</strong></p>
<p dir="auto">那么层序遍历可以不可以呢？<strong>依然可以的！只要把每一个节点的左右孩子翻转一下的遍历方式都是可以的！</strong></p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">递归法</h3><a id="user-content-递归法" class="anchor" aria-label="Permalink: 递归法" href="#递归法"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">对于二叉树的递归法的前中后序遍历，已经在<a href="https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html" rel="nofollow">二叉树：前中后序递归遍历</a>详细讲解了。</p>
<p dir="auto">我们下文以前序遍历为例，通过动画来看一下翻转的过程:</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/6704fa908e08d77bef3d5e2463fc83a59fe48cc4ffb6e0c59b082155017fde0e/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f2545372542462542422545382542442541432545342542412538432545352538462538392545362541302539312e676966"><img src="https://camo.githubusercontent.com/6704fa908e08d77bef3d5e2463fc83a59fe48cc4ffb6e0c59b082155017fde0e/68747470733a2f2f636f64652d7468696e6b696e672e63646e2e626365626f732e636f6d2f676966732f2545372542462542422545382542442541432545342542412538432545352538462538392545362541302539312e676966" alt="翻转二叉树" data-animated-image="" data-canonical-src="https://code-thinking.cdn.bcebos.com/gifs/%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.gif" style="max-width: 100%;"></a></p>
<p dir="auto">我们来看一下递归三部曲：</p>
<ol dir="auto">
<li>确定递归函数的参数和返回值</li>
</ol>
<p dir="auto">参数就是要传入节点的指针，不需要其他参数了，通常此时定下来主要参数，如果在写递归的逻辑中发现还需要其他参数的时候，随时补充。</p>
<p dir="auto">返回值的话其实也不需要，但是题目中给出的要返回root节点的指针，可以直接使用题目定义好的函数，所以就函数的返回类型为<code>TreeNode*</code>。</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="TreeNode* invertTree(TreeNode* root)"><pre>TreeNode* <span class="pl-en">invertTree</span>(TreeNode* root)</pre></div>
<ol start="2" dir="auto">
<li>确定终止条件</li>
</ol>
<p dir="auto">当前节点为空的时候，就返回</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="if (root == NULL) return root;"><pre><span class="pl-k">if</span> (root == <span class="pl-c1">NULL</span>) <span class="pl-k">return</span> root;</pre></div>
<ol start="3" dir="auto">
<li>确定单层递归的逻辑</li>
</ol>
<p dir="auto">因为是先前序遍历，所以先进行交换左右孩子节点，然后反转左子树，反转右子树。</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="swap(root-&gt;left, root-&gt;right);
invertTree(root-&gt;left);
invertTree(root-&gt;right);"><pre><span class="pl-en">swap</span>(root-&gt;left, root-&gt;right);
<span class="pl-en">invertTree</span>(root-&gt;left);
<span class="pl-en">invertTree</span>(root-&gt;right);</pre></div>
<p dir="auto">基于这递归三步法，代码基本写完，C++代码如下：</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == NULL) return root;
        swap(root-&gt;left, root-&gt;right);  // 中
        invertTree(root-&gt;left);         // 左
        invertTree(root-&gt;right);        // 右
        return root;
    }
};"><pre><span class="pl-k">class</span> <span class="pl-en">Solution</span> {
<span class="pl-k">public:</span>
    TreeNode* <span class="pl-en">invertTree</span>(TreeNode* root) {
        <span class="pl-k">if</span> (root == <span class="pl-c1">NULL</span>) <span class="pl-k">return</span> root;
        <span class="pl-c1">swap</span>(root-&gt;<span class="pl-smi">left</span>, root-&gt;<span class="pl-smi">right</span>);  <span class="pl-c"><span class="pl-c">//</span> 中</span>
        <span class="pl-c1">invertTree</span>(root-&gt;<span class="pl-smi">left</span>);         <span class="pl-c"><span class="pl-c">//</span> 左</span>
        <span class="pl-c1">invertTree</span>(root-&gt;<span class="pl-smi">right</span>);        <span class="pl-c"><span class="pl-c">//</span> 右</span>
        <span class="pl-k">return</span> root;
    }
};</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">迭代法</h3><a id="user-content-迭代法" class="anchor" aria-label="Permalink: 迭代法" href="#迭代法"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">深度优先遍历</h4><a id="user-content-深度优先遍历" class="anchor" aria-label="Permalink: 深度优先遍历" href="#深度优先遍历"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><a href="https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%BF%AD%E4%BB%A3%E9%81%8D%E5%8E%86.html" rel="nofollow">二叉树：听说递归能做的，栈也能做！</a>中给出了前中后序迭代方式的写法，所以本题可以很轻松的写出如下迭代法的代码：</p>
<p dir="auto">C++代码迭代法（前序遍历）</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == NULL) return root;
        stack&lt;TreeNode*&gt; st;
        st.push(root);
        while(!st.empty()) {
            TreeNode* node = st.top();              // 中
            st.pop();
            swap(node-&gt;left, node-&gt;right);
            if(node-&gt;right) st.push(node-&gt;right);   // 右
            if(node-&gt;left) st.push(node-&gt;left);     // 左
        }
        return root;
    }
};"><pre><span class="pl-k">class</span> <span class="pl-en">Solution</span> {
<span class="pl-k">public:</span>
    TreeNode* <span class="pl-en">invertTree</span>(TreeNode* root) {
        <span class="pl-k">if</span> (root == <span class="pl-c1">NULL</span>) <span class="pl-k">return</span> root;
        stack&lt;TreeNode*&gt; st;
        st.<span class="pl-c1">push</span>(root);
        <span class="pl-k">while</span>(!st.<span class="pl-c1">empty</span>()) {
            TreeNode* node = st.<span class="pl-c1">top</span>();              <span class="pl-c"><span class="pl-c">//</span> 中</span>
            st.<span class="pl-c1">pop</span>();
            <span class="pl-c1">swap</span>(node-&gt;<span class="pl-smi">left</span>, node-&gt;<span class="pl-smi">right</span>);
            <span class="pl-k">if</span>(node-&gt;<span class="pl-smi">right</span>) st.<span class="pl-c1">push</span>(node-&gt;<span class="pl-smi">right</span>);   <span class="pl-c"><span class="pl-c">//</span> 右</span>
            <span class="pl-k">if</span>(node-&gt;<span class="pl-smi">left</span>) st.<span class="pl-c1">push</span>(node-&gt;<span class="pl-smi">left</span>);     <span class="pl-c"><span class="pl-c">//</span> 左</span>
        }
        <span class="pl-k">return</span> root;
    }
};</pre></div>
<p dir="auto">如果这个代码看不懂的话可以再回顾一下<a href="https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%BF%AD%E4%BB%A3%E9%81%8D%E5%8E%86.html" rel="nofollow">二叉树：听说递归能做的，栈也能做！</a>。</p>
<p dir="auto">我们在<a href="https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E7%BB%9F%E4%B8%80%E8%BF%AD%E4%BB%A3%E6%B3%95.html" rel="nofollow">二叉树：前中后序迭代方式的统一写法</a>中介绍了统一的写法，所以，本题也只需将文中的代码少做修改便可。</p>
<p dir="auto">C++代码如下迭代法（前序遍历）</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        stack&lt;TreeNode*&gt; st;
        if (root != NULL) st.push(root);
        while (!st.empty()) {
            TreeNode* node = st.top();
            if (node != NULL) {
                st.pop();
                if (node-&gt;right) st.push(node-&gt;right);  // 右
                if (node-&gt;left) st.push(node-&gt;left);    // 左
                st.push(node);                          // 中
                st.push(NULL);
            } else {
                st.pop();
                node = st.top();
                st.pop();
                swap(node-&gt;left, node-&gt;right);          // 节点处理逻辑
            }
        }
        return root;
    }
};"><pre><span class="pl-k">class</span> <span class="pl-en">Solution</span> {
<span class="pl-k">public:</span>
    TreeNode* <span class="pl-en">invertTree</span>(TreeNode* root) {
        stack&lt;TreeNode*&gt; st;
        <span class="pl-k">if</span> (root != <span class="pl-c1">NULL</span>) st.<span class="pl-c1">push</span>(root);
        <span class="pl-k">while</span> (!st.<span class="pl-c1">empty</span>()) {
            TreeNode* node = st.<span class="pl-c1">top</span>();
            <span class="pl-k">if</span> (node != <span class="pl-c1">NULL</span>) {
                st.<span class="pl-c1">pop</span>();
                <span class="pl-k">if</span> (node-&gt;<span class="pl-smi">right</span>) st.<span class="pl-c1">push</span>(node-&gt;<span class="pl-smi">right</span>);  <span class="pl-c"><span class="pl-c">//</span> 右</span>
                <span class="pl-k">if</span> (node-&gt;<span class="pl-smi">left</span>) st.<span class="pl-c1">push</span>(node-&gt;<span class="pl-smi">left</span>);    <span class="pl-c"><span class="pl-c">//</span> 左</span>
                st.<span class="pl-c1">push</span>(node);                          <span class="pl-c"><span class="pl-c">//</span> 中</span>
                st.<span class="pl-c1">push</span>(<span class="pl-c1">NULL</span>);
            } <span class="pl-k">else</span> {
                st.<span class="pl-c1">pop</span>();
                node = st.<span class="pl-c1">top</span>();
                st.<span class="pl-c1">pop</span>();
                <span class="pl-c1">swap</span>(node-&gt;<span class="pl-smi">left</span>, node-&gt;<span class="pl-smi">right</span>);          <span class="pl-c"><span class="pl-c">//</span> 节点处理逻辑</span>
            }
        }
        <span class="pl-k">return</span> root;
    }
};</pre></div>
<p dir="auto">如果上面这个代码看不懂，回顾一下文章<a href="https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E7%BB%9F%E4%B8%80%E8%BF%AD%E4%BB%A3%E6%B3%95.html" rel="nofollow">二叉树：前中后序迭代方式的统一写法</a>。</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">广度优先遍历</h4><a id="user-content-广度优先遍历" class="anchor" aria-label="Permalink: 广度优先遍历" href="#广度优先遍历"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">也就是层序遍历，层数遍历也是可以翻转这棵树的，因为层序遍历也可以把每个节点的左右孩子都翻转一遍，代码如下：</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        queue&lt;TreeNode*&gt; que;
        if (root != NULL) que.push(root);
        while (!que.empty()) {
            int size = que.size();
            for (int i = 0; i &lt; size; i++) {
                TreeNode* node = que.front();
                que.pop();
                swap(node-&gt;left, node-&gt;right); // 节点处理
                if (node-&gt;left) que.push(node-&gt;left);
                if (node-&gt;right) que.push(node-&gt;right);
            }
        }
        return root;
    }
};"><pre><span class="pl-k">class</span> <span class="pl-en">Solution</span> {
<span class="pl-k">public:</span>
    TreeNode* <span class="pl-en">invertTree</span>(TreeNode* root) {
        queue&lt;TreeNode*&gt; que;
        <span class="pl-k">if</span> (root != <span class="pl-c1">NULL</span>) que.<span class="pl-c1">push</span>(root);
        <span class="pl-k">while</span> (!que.<span class="pl-c1">empty</span>()) {
            <span class="pl-k">int</span> size = que.<span class="pl-c1">size</span>();
            <span class="pl-k">for</span> (<span class="pl-k">int</span> i = <span class="pl-c1">0</span>; i &lt; size; i++) {
                TreeNode* node = que.<span class="pl-c1">front</span>();
                que.<span class="pl-c1">pop</span>();
                <span class="pl-c1">swap</span>(node-&gt;<span class="pl-smi">left</span>, node-&gt;<span class="pl-smi">right</span>); <span class="pl-c"><span class="pl-c">//</span> 节点处理</span>
                <span class="pl-k">if</span> (node-&gt;<span class="pl-smi">left</span>) que.<span class="pl-c1">push</span>(node-&gt;<span class="pl-smi">left</span>);
                <span class="pl-k">if</span> (node-&gt;<span class="pl-smi">right</span>) que.<span class="pl-c1">push</span>(node-&gt;<span class="pl-smi">right</span>);
            }
        }
        <span class="pl-k">return</span> root;
    }
};</pre></div>
<p dir="auto">如果对以上代码不理解，或者不清楚二叉树的层序遍历，可以看这篇<a href="https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html" rel="nofollow">二叉树：层序遍历登场！</a></p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">拓展</h2><a id="user-content-拓展" class="anchor" aria-label="Permalink: 拓展" href="#拓展"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><strong>文中我指的是递归的中序遍历是不行的，因为使用递归的中序遍历，某些节点的左右孩子会翻转两次。</strong></p>
<p dir="auto">如果非要使用递归中序的方式写，也可以，如下代码就可以避免节点左右孩子翻转两次的情况：</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == NULL) return root;
        invertTree(root-&gt;left);         // 左
        swap(root-&gt;left, root-&gt;right);  // 中
        invertTree(root-&gt;left);         // 注意 这里依然要遍历左孩子，因为中间节点已经翻转了
        return root;
    }
};"><pre><span class="pl-k">class</span> <span class="pl-en">Solution</span> {
<span class="pl-k">public:</span>
    TreeNode* <span class="pl-en">invertTree</span>(TreeNode* root) {
        <span class="pl-k">if</span> (root == <span class="pl-c1">NULL</span>) <span class="pl-k">return</span> root;
        <span class="pl-c1">invertTree</span>(root-&gt;<span class="pl-smi">left</span>);         <span class="pl-c"><span class="pl-c">//</span> 左</span>
        <span class="pl-c1">swap</span>(root-&gt;<span class="pl-smi">left</span>, root-&gt;<span class="pl-smi">right</span>);  <span class="pl-c"><span class="pl-c">//</span> 中</span>
        <span class="pl-c1">invertTree</span>(root-&gt;<span class="pl-smi">left</span>);         <span class="pl-c"><span class="pl-c">//</span> 注意 这里依然要遍历左孩子，因为中间节点已经翻转了</span>
        <span class="pl-k">return</span> root;
    }
};</pre></div>
<p dir="auto">代码虽然可以，但这毕竟不是真正的递归中序遍历了。</p>
<p dir="auto">但使用迭代方式统一写法的中序是可以的。</p>
<p dir="auto">代码如下：</p>
<div class="highlight highlight-source-c++ notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        stack&lt;TreeNode*&gt; st;
        if (root != NULL) st.push(root);
        while (!st.empty()) {
            TreeNode* node = st.top();
            if (node != NULL) {
                st.pop();
                if (node-&gt;right) st.push(node-&gt;right);  // 右
                st.push(node);                          // 中
                st.push(NULL);
                if (node-&gt;left) st.push(node-&gt;left);    // 左

            } else {
                st.pop();
                node = st.top();
                st.pop();
                swap(node-&gt;left, node-&gt;right);          // 节点处理逻辑
            }
        }
        return root;
    }
};
"><pre><span class="pl-k">class</span> <span class="pl-en">Solution</span> {
<span class="pl-k">public:</span>
    TreeNode* <span class="pl-en">invertTree</span>(TreeNode* root) {
        stack&lt;TreeNode*&gt; st;
        <span class="pl-k">if</span> (root != <span class="pl-c1">NULL</span>) st.<span class="pl-c1">push</span>(root);
        <span class="pl-k">while</span> (!st.<span class="pl-c1">empty</span>()) {
            TreeNode* node = st.<span class="pl-c1">top</span>();
            <span class="pl-k">if</span> (node != <span class="pl-c1">NULL</span>) {
                st.<span class="pl-c1">pop</span>();
                <span class="pl-k">if</span> (node-&gt;<span class="pl-smi">right</span>) st.<span class="pl-c1">push</span>(node-&gt;<span class="pl-smi">right</span>);  <span class="pl-c"><span class="pl-c">//</span> 右</span>
                st.<span class="pl-c1">push</span>(node);                          <span class="pl-c"><span class="pl-c">//</span> 中</span>
                st.<span class="pl-c1">push</span>(<span class="pl-c1">NULL</span>);
                <span class="pl-k">if</span> (node-&gt;<span class="pl-smi">left</span>) st.<span class="pl-c1">push</span>(node-&gt;<span class="pl-smi">left</span>);    <span class="pl-c"><span class="pl-c">//</span> 左</span>

            } <span class="pl-k">else</span> {
                st.<span class="pl-c1">pop</span>();
                node = st.<span class="pl-c1">top</span>();
                st.<span class="pl-c1">pop</span>();
                <span class="pl-c1">swap</span>(node-&gt;<span class="pl-smi">left</span>, node-&gt;<span class="pl-smi">right</span>);          <span class="pl-c"><span class="pl-c">//</span> 节点处理逻辑</span>
            }
        }
        <span class="pl-k">return</span> root;
    }
};
</pre></div>
<p dir="auto">为什么这个中序就是可以的呢，因为这是用栈来遍历，而不是靠指针来遍历，避免了递归法中翻转了两次的情况，大家可以画图理解一下，这里有点意思的。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">总结</h2><a id="user-content-总结" class="anchor" aria-label="Permalink: 总结" href="#总结"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">针对二叉树的问题，解题之前一定要想清楚究竟是前中后序遍历，还是层序遍历。</p>
<p dir="auto"><strong>二叉树解题的大忌就是自己稀里糊涂的过了（因为这道题相对简单），但是也不知道自己是怎么遍历的。</strong></p>
<p dir="auto">这也是造成了二叉树的题目“一看就会，一写就废”的原因。</p>
<p dir="auto"><strong>针对翻转二叉树，我给出了一种递归，三种迭代（两种模拟深度优先遍历，一种层序遍历）的写法，都是之前我们讲过的写法，融汇贯通一下而已。</strong></p>
<p dir="auto">大家一定也有自己的解法，但一定要成方法论，这样才能通用，才能举一反三！</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">其他语言版本</h2><a id="user-content-其他语言版本" class="anchor" aria-label="Permalink: 其他语言版本" href="#其他语言版本"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Java:</h3><a id="user-content-java" class="anchor" aria-label="Permalink: Java:" href="#java"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="//DFS递归
class Solution {
   /**
     * 前后序遍历都可以
     * 中序不行，因为先左孩子交换孩子，再根交换孩子（做完后，右孩子已经变成了原来的左孩子），再右孩子交换孩子（此时其实是对原来的左孩子做交换）
     */
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        invertTree(root.left);
        invertTree(root.right);
        swapChildren(root);
        return root;
    }

    private void swapChildren(TreeNode root) {
        TreeNode tmp = root.left;
        root.left = root.right;
        root.right = tmp;
    }
}

//BFS
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {return null;}
        ArrayDeque&lt;TreeNode&gt; deque = new ArrayDeque&lt;&gt;();
        deque.offer(root);
        while (!deque.isEmpty()) {
            int size = deque.size();
            while (size-- &gt; 0) {
                TreeNode node = deque.poll();
                swap(node);
                if (node.left != null) deque.offer(node.left);
                if (node.right != null) deque.offer(node.right);
            }
        }
        return root;
    }

    public void swap(TreeNode root) {
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
    }
}"><pre><span class="pl-c">//DFS递归</span>
<span class="pl-k">class</span> <span class="pl-smi">Solution</span> {
   <span class="pl-c">/**</span>
<span class="pl-c">     * 前后序遍历都可以</span>
<span class="pl-c">     * 中序不行，因为先左孩子交换孩子，再根交换孩子（做完后，右孩子已经变成了原来的左孩子），再右孩子交换孩子（此时其实是对原来的左孩子做交换）</span>
<span class="pl-c">     */</span>
    <span class="pl-k">public</span> <span class="pl-smi">TreeNode</span> <span class="pl-en">invertTree</span>(<span class="pl-smi">TreeNode</span> <span class="pl-s1">root</span>) {
        <span class="pl-k">if</span> (<span class="pl-s1">root</span> == <span class="pl-c1">null</span>) {
            <span class="pl-k">return</span> <span class="pl-c1">null</span>;
        }
        <span class="pl-en">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-s1">left</span>);
        <span class="pl-en">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-s1">right</span>);
        <span class="pl-en">swapChildren</span>(<span class="pl-s1">root</span>);
        <span class="pl-k">return</span> <span class="pl-s1">root</span>;
    }

    <span class="pl-k">private</span> <span class="pl-smi">void</span> <span class="pl-en">swapChildren</span>(<span class="pl-smi">TreeNode</span> <span class="pl-s1">root</span>) {
        <span class="pl-smi">TreeNode</span> <span class="pl-s1">tmp</span> = <span class="pl-s1">root</span>.<span class="pl-s1">left</span>;
        <span class="pl-s1">root</span>.<span class="pl-s1">left</span> = <span class="pl-s1">root</span>.<span class="pl-s1">right</span>;
        <span class="pl-s1">root</span>.<span class="pl-s1">right</span> = <span class="pl-s1">tmp</span>;
    }
}

<span class="pl-c">//BFS</span>
<span class="pl-k">class</span> <span class="pl-smi">Solution</span> {
    <span class="pl-k">public</span> <span class="pl-smi">TreeNode</span> <span class="pl-en">invertTree</span>(<span class="pl-smi">TreeNode</span> <span class="pl-s1">root</span>) {
        <span class="pl-k">if</span> (<span class="pl-s1">root</span> == <span class="pl-c1">null</span>) {<span class="pl-k">return</span> <span class="pl-c1">null</span>;}
        <span class="pl-smi">ArrayDeque</span>&lt;<span class="pl-smi">TreeNode</span>&gt; <span class="pl-s1">deque</span> = <span class="pl-k">new</span> <span class="pl-smi">ArrayDeque</span>&lt;&gt;();
        <span class="pl-s1">deque</span>.<span class="pl-en">offer</span>(<span class="pl-s1">root</span>);
        <span class="pl-k">while</span> (!<span class="pl-s1">deque</span>.<span class="pl-en">isEmpty</span>()) {
            <span class="pl-smi">int</span> <span class="pl-s1">size</span> = <span class="pl-s1">deque</span>.<span class="pl-en">size</span>();
            <span class="pl-k">while</span> (<span class="pl-s1">size</span>-- &gt; <span class="pl-c1">0</span>) {
                <span class="pl-smi">TreeNode</span> <span class="pl-s1">node</span> = <span class="pl-s1">deque</span>.<span class="pl-en">poll</span>();
                <span class="pl-en">swap</span>(<span class="pl-s1">node</span>);
                <span class="pl-k">if</span> (<span class="pl-s1">node</span>.<span class="pl-s1">left</span> != <span class="pl-c1">null</span>) <span class="pl-s1">deque</span>.<span class="pl-en">offer</span>(<span class="pl-s1">node</span>.<span class="pl-s1">left</span>);
                <span class="pl-k">if</span> (<span class="pl-s1">node</span>.<span class="pl-s1">right</span> != <span class="pl-c1">null</span>) <span class="pl-s1">deque</span>.<span class="pl-en">offer</span>(<span class="pl-s1">node</span>.<span class="pl-s1">right</span>);
            }
        }
        <span class="pl-k">return</span> <span class="pl-s1">root</span>;
    }

    <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">swap</span>(<span class="pl-smi">TreeNode</span> <span class="pl-s1">root</span>) {
        <span class="pl-smi">TreeNode</span> <span class="pl-s1">temp</span> = <span class="pl-s1">root</span>.<span class="pl-s1">left</span>;
        <span class="pl-s1">root</span>.<span class="pl-s1">left</span> = <span class="pl-s1">root</span>.<span class="pl-s1">right</span>;
        <span class="pl-s1">root</span>.<span class="pl-s1">right</span> = <span class="pl-s1">temp</span>;
    }
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Python:</h3><a id="user-content-python" class="anchor" aria-label="Permalink: Python:" href="#python"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">递归法：前序遍历：</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def invertTree(self, root: TreeNode) -&gt; TreeNode:
        if not root:
            return None
        root.left, root.right = root.right, root.left
        self.invertTree(root.left)
        self.invertTree(root.right)
        return root"><pre><span class="pl-c"># Definition for a binary tree node.</span>
<span class="pl-c"># class TreeNode:</span>
<span class="pl-c">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="pl-c">#         self.val = val</span>
<span class="pl-c">#         self.left = left</span>
<span class="pl-c">#         self.right = right</span>
<span class="pl-k">class</span> <span class="pl-v">Solution</span>:
    <span class="pl-k">def</span> <span class="pl-en">invertTree</span>(<span class="pl-s1">self</span>, <span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span>) <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span>:
        <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">root</span>:
            <span class="pl-k">return</span> <span class="pl-c1">None</span>
        <span class="pl-s1">root</span>.<span class="pl-c1">left</span>, <span class="pl-s1">root</span>.<span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span>.<span class="pl-c1">right</span>, <span class="pl-s1">root</span>.<span class="pl-c1">left</span>
        <span class="pl-s1">self</span>.<span class="pl-c1">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-c1">left</span>)
        <span class="pl-s1">self</span>.<span class="pl-c1">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-c1">right</span>)
        <span class="pl-k">return</span> <span class="pl-s1">root</span></pre></div>
<p dir="auto">迭代法：前序遍历：</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def invertTree(self, root: TreeNode) -&gt; TreeNode:
        if not root:
            return None      
        stack = [root]        
        while stack:
            node = stack.pop()   
            node.left, node.right = node.right, node.left                   
            if node.left:
                stack.append(node.left)
            if node.right:
                stack.append(node.right)  
        return root"><pre><span class="pl-c"># Definition for a binary tree node.</span>
<span class="pl-c"># class TreeNode:</span>
<span class="pl-c">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="pl-c">#         self.val = val</span>
<span class="pl-c">#         self.left = left</span>
<span class="pl-c">#         self.right = right</span>
<span class="pl-k">class</span> <span class="pl-v">Solution</span>:
    <span class="pl-k">def</span> <span class="pl-en">invertTree</span>(<span class="pl-s1">self</span>, <span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span>) <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span>:
        <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">root</span>:
            <span class="pl-k">return</span> <span class="pl-c1">None</span>      
        <span class="pl-s1">stack</span> <span class="pl-c1">=</span> [<span class="pl-s1">root</span>]        
        <span class="pl-k">while</span> <span class="pl-s1">stack</span>:
            <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">stack</span>.<span class="pl-c1">pop</span>()   
            <span class="pl-s1">node</span>.<span class="pl-c1">left</span>, <span class="pl-s1">node</span>.<span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span>.<span class="pl-c1">right</span>, <span class="pl-s1">node</span>.<span class="pl-c1">left</span>                   
            <span class="pl-k">if</span> <span class="pl-s1">node</span>.<span class="pl-c1">left</span>:
                <span class="pl-s1">stack</span>.<span class="pl-c1">append</span>(<span class="pl-s1">node</span>.<span class="pl-c1">left</span>)
            <span class="pl-k">if</span> <span class="pl-s1">node</span>.<span class="pl-c1">right</span>:
                <span class="pl-s1">stack</span>.<span class="pl-c1">append</span>(<span class="pl-s1">node</span>.<span class="pl-c1">right</span>)  
        <span class="pl-k">return</span> <span class="pl-s1">root</span></pre></div>
<p dir="auto">递归法：中序遍历：</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def invertTree(self, root: TreeNode) -&gt; TreeNode:
        if not root:
            return None
        self.invertTree(root.left)
        root.left, root.right = root.right, root.left
        self.invertTree(root.left)
        return root"><pre><span class="pl-c"># Definition for a binary tree node.</span>
<span class="pl-c"># class TreeNode:</span>
<span class="pl-c">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="pl-c">#         self.val = val</span>
<span class="pl-c">#         self.left = left</span>
<span class="pl-c">#         self.right = right</span>
<span class="pl-k">class</span> <span class="pl-v">Solution</span>:
    <span class="pl-k">def</span> <span class="pl-en">invertTree</span>(<span class="pl-s1">self</span>, <span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span>) <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span>:
        <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">root</span>:
            <span class="pl-k">return</span> <span class="pl-c1">None</span>
        <span class="pl-s1">self</span>.<span class="pl-c1">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-c1">left</span>)
        <span class="pl-s1">root</span>.<span class="pl-c1">left</span>, <span class="pl-s1">root</span>.<span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span>.<span class="pl-c1">right</span>, <span class="pl-s1">root</span>.<span class="pl-c1">left</span>
        <span class="pl-s1">self</span>.<span class="pl-c1">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-c1">left</span>)
        <span class="pl-k">return</span> <span class="pl-s1">root</span></pre></div>
<p dir="auto">迭代法：中序遍历：</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def invertTree(self, root: TreeNode) -&gt; TreeNode:
        if not root:
            return None      
        stack = [root]        
        while stack:
            node = stack.pop()                   
            if node.left:
                stack.append(node.left)
            node.left, node.right = node.right, node.left               
            if node.left:
                stack.append(node.left)       
        return root"><pre><span class="pl-c"># Definition for a binary tree node.</span>
<span class="pl-c"># class TreeNode:</span>
<span class="pl-c">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="pl-c">#         self.val = val</span>
<span class="pl-c">#         self.left = left</span>
<span class="pl-c">#         self.right = right</span>
<span class="pl-k">class</span> <span class="pl-v">Solution</span>:
    <span class="pl-k">def</span> <span class="pl-en">invertTree</span>(<span class="pl-s1">self</span>, <span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span>) <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span>:
        <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">root</span>:
            <span class="pl-k">return</span> <span class="pl-c1">None</span>      
        <span class="pl-s1">stack</span> <span class="pl-c1">=</span> [<span class="pl-s1">root</span>]        
        <span class="pl-k">while</span> <span class="pl-s1">stack</span>:
            <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">stack</span>.<span class="pl-c1">pop</span>()                   
            <span class="pl-k">if</span> <span class="pl-s1">node</span>.<span class="pl-c1">left</span>:
                <span class="pl-s1">stack</span>.<span class="pl-c1">append</span>(<span class="pl-s1">node</span>.<span class="pl-c1">left</span>)
            <span class="pl-s1">node</span>.<span class="pl-c1">left</span>, <span class="pl-s1">node</span>.<span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span>.<span class="pl-c1">right</span>, <span class="pl-s1">node</span>.<span class="pl-c1">left</span>               
            <span class="pl-k">if</span> <span class="pl-s1">node</span>.<span class="pl-c1">left</span>:
                <span class="pl-s1">stack</span>.<span class="pl-c1">append</span>(<span class="pl-s1">node</span>.<span class="pl-c1">left</span>)       
        <span class="pl-k">return</span> <span class="pl-s1">root</span></pre></div>
<p dir="auto">递归法：后序遍历：</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def invertTree(self, root: TreeNode) -&gt; TreeNode:
        if not root:
            return None
        self.invertTree(root.left)
        self.invertTree(root.right)
        root.left, root.right = root.right, root.left
        return root"><pre><span class="pl-c"># Definition for a binary tree node.</span>
<span class="pl-c"># class TreeNode:</span>
<span class="pl-c">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="pl-c">#         self.val = val</span>
<span class="pl-c">#         self.left = left</span>
<span class="pl-c">#         self.right = right</span>
<span class="pl-k">class</span> <span class="pl-v">Solution</span>:
    <span class="pl-k">def</span> <span class="pl-en">invertTree</span>(<span class="pl-s1">self</span>, <span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span>) <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span>:
        <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">root</span>:
            <span class="pl-k">return</span> <span class="pl-c1">None</span>
        <span class="pl-s1">self</span>.<span class="pl-c1">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-c1">left</span>)
        <span class="pl-s1">self</span>.<span class="pl-c1">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-c1">right</span>)
        <span class="pl-s1">root</span>.<span class="pl-c1">left</span>, <span class="pl-s1">root</span>.<span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span>.<span class="pl-c1">right</span>, <span class="pl-s1">root</span>.<span class="pl-c1">left</span>
        <span class="pl-k">return</span> <span class="pl-s1">root</span></pre></div>
<p dir="auto">迭代法：后序遍历：</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def invertTree(self, root: TreeNode) -&gt; TreeNode:
        if not root:
            return None      
        stack = [root]        
        while stack:
            node = stack.pop()                   
            if node.left:
                stack.append(node.left)
            if node.right:
                stack.append(node.right)  
            node.left, node.right = node.right, node.left               
     
        return root"><pre><span class="pl-c"># Definition for a binary tree node.</span>
<span class="pl-c"># class TreeNode:</span>
<span class="pl-c">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="pl-c">#         self.val = val</span>
<span class="pl-c">#         self.left = left</span>
<span class="pl-c">#         self.right = right</span>
<span class="pl-k">class</span> <span class="pl-v">Solution</span>:
    <span class="pl-k">def</span> <span class="pl-en">invertTree</span>(<span class="pl-s1">self</span>, <span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span>) <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span>:
        <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">root</span>:
            <span class="pl-k">return</span> <span class="pl-c1">None</span>      
        <span class="pl-s1">stack</span> <span class="pl-c1">=</span> [<span class="pl-s1">root</span>]        
        <span class="pl-k">while</span> <span class="pl-s1">stack</span>:
            <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">stack</span>.<span class="pl-c1">pop</span>()                   
            <span class="pl-k">if</span> <span class="pl-s1">node</span>.<span class="pl-c1">left</span>:
                <span class="pl-s1">stack</span>.<span class="pl-c1">append</span>(<span class="pl-s1">node</span>.<span class="pl-c1">left</span>)
            <span class="pl-k">if</span> <span class="pl-s1">node</span>.<span class="pl-c1">right</span>:
                <span class="pl-s1">stack</span>.<span class="pl-c1">append</span>(<span class="pl-s1">node</span>.<span class="pl-c1">right</span>)  
            <span class="pl-s1">node</span>.<span class="pl-c1">left</span>, <span class="pl-s1">node</span>.<span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span>.<span class="pl-c1">right</span>, <span class="pl-s1">node</span>.<span class="pl-c1">left</span>               
     
        <span class="pl-k">return</span> <span class="pl-s1">root</span></pre></div>
<p dir="auto">迭代法：广度优先遍历（层序遍历）：</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def invertTree(self, root: TreeNode) -&gt; TreeNode:
        if not root: 
            return None

        queue = collections.deque([root])    
        while queue:
            for i in range(len(queue)):
                node = queue.popleft()
                node.left, node.right = node.right, node.left
                if node.left: queue.append(node.left)
                if node.right: queue.append(node.right)
        return root   
"><pre><span class="pl-c"># Definition for a binary tree node.</span>
<span class="pl-c"># class TreeNode:</span>
<span class="pl-c">#     def __init__(self, val=0, left=None, right=None):</span>
<span class="pl-c">#         self.val = val</span>
<span class="pl-c">#         self.left = left</span>
<span class="pl-c">#         self.right = right</span>
<span class="pl-k">class</span> <span class="pl-v">Solution</span>:
    <span class="pl-k">def</span> <span class="pl-en">invertTree</span>(<span class="pl-s1">self</span>, <span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span>) <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span>:
        <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">root</span>: 
            <span class="pl-k">return</span> <span class="pl-c1">None</span>

        <span class="pl-s1">queue</span> <span class="pl-c1">=</span> <span class="pl-s1">collections</span>.<span class="pl-c1">deque</span>([<span class="pl-s1">root</span>])    
        <span class="pl-k">while</span> <span class="pl-s1">queue</span>:
            <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-en">len</span>(<span class="pl-s1">queue</span>)):
                <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">queue</span>.<span class="pl-c1">popleft</span>()
                <span class="pl-s1">node</span>.<span class="pl-c1">left</span>, <span class="pl-s1">node</span>.<span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span>.<span class="pl-c1">right</span>, <span class="pl-s1">node</span>.<span class="pl-c1">left</span>
                <span class="pl-k">if</span> <span class="pl-s1">node</span>.<span class="pl-c1">left</span>: <span class="pl-s1">queue</span>.<span class="pl-c1">append</span>(<span class="pl-s1">node</span>.<span class="pl-c1">left</span>)
                <span class="pl-k">if</span> <span class="pl-s1">node</span>.<span class="pl-c1">right</span>: <span class="pl-s1">queue</span>.<span class="pl-c1">append</span>(<span class="pl-s1">node</span>.<span class="pl-c1">right</span>)
        <span class="pl-k">return</span> <span class="pl-s1">root</span>   </pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Go:</h3><a id="user-content-go" class="anchor" aria-label="Permalink: Go:" href="#go"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">递归版本的前序遍历</p>
<div class="highlight highlight-source-go notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="func invertTree(root *TreeNode) *TreeNode {
    if root == nil {
        return nil
    }
    root.Left, root.Right = root.Right, root.Left    //交换
    
    invertTree(root.Left)
    invertTree(root.Right)

    return root
}"><pre><span class="pl-k">func</span> <span class="pl-s1">invertTree</span>(<span class="pl-s1">root</span> <span class="pl-c1">*</span><span class="pl-smi">TreeNode</span>) <span class="pl-c1">*</span><span class="pl-smi">TreeNode</span> {
    <span class="pl-k">if</span> <span class="pl-s1">root</span> <span class="pl-c1">==</span> <span class="pl-c1">nil</span> {
        <span class="pl-k">return</span> <span class="pl-c1">nil</span>
    }
    <span class="pl-s1">root</span>.<span class="pl-c1">Left</span>, <span class="pl-s1">root</span>.<span class="pl-c1">Right</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span>.<span class="pl-c1">Right</span>, <span class="pl-s1">root</span>.<span class="pl-c1">Left</span>    <span class="pl-c">//交换</span>
    
    <span class="pl-s1">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-c1">Left</span>)
    <span class="pl-s1">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-c1">Right</span>)

    <span class="pl-k">return</span> <span class="pl-s1">root</span>
}</pre></div>
<p dir="auto">递归版本的后序遍历</p>
<div class="highlight highlight-source-go notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="func invertTree(root *TreeNode) *TreeNode {
    if root == nil {
        return root
    }
    
    invertTree(root.Left)     //遍历左节点
    invertTree(root.Right)    //遍历右节点
    root.Left, root.Right = root.Right, root.Left    //交换
    
    return root
}"><pre><span class="pl-k">func</span> <span class="pl-s1">invertTree</span>(<span class="pl-s1">root</span> <span class="pl-c1">*</span><span class="pl-smi">TreeNode</span>) <span class="pl-c1">*</span><span class="pl-smi">TreeNode</span> {
    <span class="pl-k">if</span> <span class="pl-s1">root</span> <span class="pl-c1">==</span> <span class="pl-c1">nil</span> {
        <span class="pl-k">return</span> <span class="pl-s1">root</span>
    }
    
    <span class="pl-s1">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-c1">Left</span>)     <span class="pl-c">//遍历左节点</span>
    <span class="pl-s1">invertTree</span>(<span class="pl-s1">root</span>.<span class="pl-c1">Right</span>)    <span class="pl-c">//遍历右节点</span>
    <span class="pl-s1">root</span>.<span class="pl-c1">Left</span>, <span class="pl-s1">root</span>.<span class="pl-c1">Right</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span>.<span class="pl-c1">Right</span>, <span class="pl-s1">root</span>.<span class="pl-c1">Left</span>    <span class="pl-c">//交换</span>
    
    <span class="pl-k">return</span> <span class="pl-s1">root</span>
}</pre></div>
<p dir="auto">迭代版本的前序遍历</p>
<div class="highlight highlight-source-go notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="func invertTree(root *TreeNode) *TreeNode {
    stack := []*TreeNode{}
    node := root
    for node != nil || len(stack) &gt; 0 {
        for node != nil {
            node.Left, node.Right = node.Right, node.Left    //交换
            stack = append(stack,node)
            node = node.Left
        }
        node = stack[len(stack)-1]
        stack = stack[:len(stack)-1]
        node = node.Right
    }
    
    return root
}"><pre><span class="pl-k">func</span> <span class="pl-s1">invertTree</span>(<span class="pl-s1">root</span> <span class="pl-c1">*</span><span class="pl-smi">TreeNode</span>) <span class="pl-c1">*</span><span class="pl-smi">TreeNode</span> {
    <span class="pl-s1">stack</span> <span class="pl-c1">:=</span> []<span class="pl-c1">*</span><span class="pl-smi">TreeNode</span>{}
    <span class="pl-s1">node</span> <span class="pl-c1">:=</span> <span class="pl-s1">root</span>
    <span class="pl-k">for</span> <span class="pl-s1">node</span> <span class="pl-c1">!=</span> <span class="pl-c1">nil</span> <span class="pl-c1">||</span> <span class="pl-s1">len</span>(<span class="pl-s1">stack</span>) <span class="pl-c1">&gt;</span> <span class="pl-c1">0</span> {
        <span class="pl-k">for</span> <span class="pl-s1">node</span> <span class="pl-c1">!=</span> <span class="pl-c1">nil</span> {
            <span class="pl-s1">node</span>.<span class="pl-c1">Left</span>, <span class="pl-s1">node</span>.<span class="pl-c1">Right</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span>.<span class="pl-c1">Right</span>, <span class="pl-s1">node</span>.<span class="pl-c1">Left</span>    <span class="pl-c">//交换</span>
            <span class="pl-s1">stack</span> <span class="pl-c1">=</span> <span class="pl-s1">append</span>(<span class="pl-s1">stack</span>,<span class="pl-s1">node</span>)
            <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span>.<span class="pl-c1">Left</span>
        }
        <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">stack</span>[<span class="pl-s1">len</span>(<span class="pl-s1">stack</span>)<span class="pl-c1">-</span><span class="pl-c1">1</span>]
        <span class="pl-s1">stack</span> <span class="pl-c1">=</span> <span class="pl-s1">stack</span>[:<span class="pl-s1">len</span>(<span class="pl-s1">stack</span>)<span class="pl-c1">-</span><span class="pl-c1">1</span>]
        <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span>.<span class="pl-c1">Right</span>
    }
    
    <span class="pl-k">return</span> <span class="pl-s1">root</span>
}</pre></div>
<p dir="auto">迭代版本的后序遍历</p>
<div class="highlight highlight-source-go notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="func invertTree(root *TreeNode) *TreeNode {
    stack := []*TreeNode{}
    node := root
    var prev *TreeNode
    for node != nil || len(stack) &gt; 0 {
        for node != nil {
            stack = append(stack, node)
            node = node.Left
        }
        node = stack[len(stack)-1]
        stack = stack[:len(stack)-1]
        if node.Right == nil || node.Right == prev {
            node.Left, node.Right = node.Right, node.Left     //交换
            prev = node
            node = nil
        } else {
            stack = append(stack, node)
            node = node.Right
        }
    }
    
    return root
}"><pre><span class="pl-k">func</span> <span class="pl-s1">invertTree</span>(<span class="pl-s1">root</span> <span class="pl-c1">*</span><span class="pl-smi">TreeNode</span>) <span class="pl-c1">*</span><span class="pl-smi">TreeNode</span> {
    <span class="pl-s1">stack</span> <span class="pl-c1">:=</span> []<span class="pl-c1">*</span><span class="pl-smi">TreeNode</span>{}
    <span class="pl-s1">node</span> <span class="pl-c1">:=</span> <span class="pl-s1">root</span>
    <span class="pl-k">var</span> <span class="pl-s1">prev</span> <span class="pl-c1">*</span><span class="pl-smi">TreeNode</span>
    <span class="pl-k">for</span> <span class="pl-s1">node</span> <span class="pl-c1">!=</span> <span class="pl-c1">nil</span> <span class="pl-c1">||</span> <span class="pl-s1">len</span>(<span class="pl-s1">stack</span>) <span class="pl-c1">&gt;</span> <span class="pl-c1">0</span> {
        <span class="pl-k">for</span> <span class="pl-s1">node</span> <span class="pl-c1">!=</span> <span class="pl-c1">nil</span> {
            <span class="pl-s1">stack</span> <span class="pl-c1">=</span> <span class="pl-s1">append</span>(<span class="pl-s1">stack</span>, <span class="pl-s1">node</span>)
            <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span>.<span class="pl-c1">Left</span>
        }
        <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">stack</span>[<span class="pl-s1">len</span>(<span class="pl-s1">stack</span>)<span class="pl-c1">-</span><span class="pl-c1">1</span>]
        <span class="pl-s1">stack</span> <span class="pl-c1">=</span> <span class="pl-s1">stack</span>[:<span class="pl-s1">len</span>(<span class="pl-s1">stack</span>)<span class="pl-c1">-</span><span class="pl-c1">1</span>]
        <span class="pl-k">if</span> <span class="pl-s1">node</span>.<span class="pl-c1">Right</span> <span class="pl-c1">==</span> <span class="pl-c1">nil</span> <span class="pl-c1">||</span> <span class="pl-s1">node</span>.<span class="pl-c1">Right</span> <span class="pl-c1">==</span> <span class="pl-s1">prev</span> {
            <span class="pl-s1">node</span>.<span class="pl-c1">Left</span>, <span class="pl-s1">node</span>.<span class="pl-c1">Right</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span>.<span class="pl-c1">Right</span>, <span class="pl-s1">node</span>.<span class="pl-c1">Left</span>     <span class="pl-c">//交换</span>
            <span class="pl-s1">prev</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span>
            <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-c1">nil</span>
        } <span class="pl-k">else</span> {
            <span class="pl-s1">stack</span> <span class="pl-c1">=</span> <span class="pl-s1">append</span>(<span class="pl-s1">stack</span>, <span class="pl-s1">node</span>)
            <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span>.<span class="pl-c1">Right</span>
        }
    }
    
    <span class="pl-k">return</span> <span class="pl-s1">root</span>
}</pre></div>
<p dir="auto">层序遍历</p>
<div class="highlight highlight-source-go notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="func invertTree(root *TreeNode) *TreeNode {
    if root == nil{
        return root
    }
    queue := list.New()
    node := root
    queue.PushBack(node)
    for queue.Len() &gt; 0 {
        length := queue.Len()
        for i := 0; i &lt; length; i++ {
            e := queue.Remove(queue.Front()).(*TreeNode)
            e.Left, e.Right = e.Right, e.Left    //交换
            if e.Left != nil {
                queue.PushBack(e.Left)
            }
            if e.Right != nil {
                queue.PushBack(e.Right)
            }
        }
    }
    return root
}"><pre><span class="pl-k">func</span> <span class="pl-s1">invertTree</span>(<span class="pl-s1">root</span> <span class="pl-c1">*</span><span class="pl-smi">TreeNode</span>) <span class="pl-c1">*</span><span class="pl-smi">TreeNode</span> {
    <span class="pl-k">if</span> <span class="pl-s1">root</span> <span class="pl-c1">==</span> <span class="pl-c1">nil</span>{
        <span class="pl-k">return</span> <span class="pl-s1">root</span>
    }
    <span class="pl-s1">queue</span> <span class="pl-c1">:=</span> <span class="pl-s1">list</span>.<span class="pl-c1">New</span>()
    <span class="pl-s1">node</span> <span class="pl-c1">:=</span> <span class="pl-s1">root</span>
    <span class="pl-s1">queue</span>.<span class="pl-c1">PushBack</span>(<span class="pl-s1">node</span>)
    <span class="pl-k">for</span> <span class="pl-s1">queue</span>.<span class="pl-c1">Len</span>() <span class="pl-c1">&gt;</span> <span class="pl-c1">0</span> {
        <span class="pl-s1">length</span> <span class="pl-c1">:=</span> <span class="pl-s1">queue</span>.<span class="pl-c1">Len</span>()
        <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">:=</span> <span class="pl-c1">0</span>; <span class="pl-s1">i</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">length</span>; <span class="pl-s1">i</span><span class="pl-c1">++</span> {
            <span class="pl-s1">e</span> <span class="pl-c1">:=</span> <span class="pl-s1">queue</span>.<span class="pl-c1">Remove</span>(<span class="pl-s1">queue</span>.<span class="pl-c1">Front</span>()).(<span class="pl-c1">*</span><span class="pl-smi">TreeNode</span>)
            <span class="pl-s1">e</span>.<span class="pl-c1">Left</span>, <span class="pl-s1">e</span>.<span class="pl-c1">Right</span> <span class="pl-c1">=</span> <span class="pl-s1">e</span>.<span class="pl-c1">Right</span>, <span class="pl-s1">e</span>.<span class="pl-c1">Left</span>    <span class="pl-c">//交换</span>
            <span class="pl-k">if</span> <span class="pl-s1">e</span>.<span class="pl-c1">Left</span> <span class="pl-c1">!=</span> <span class="pl-c1">nil</span> {
                <span class="pl-s1">queue</span>.<span class="pl-c1">PushBack</span>(<span class="pl-s1">e</span>.<span class="pl-c1">Left</span>)
            }
            <span class="pl-k">if</span> <span class="pl-s1">e</span>.<span class="pl-c1">Right</span> <span class="pl-c1">!=</span> <span class="pl-c1">nil</span> {
                <span class="pl-s1">queue</span>.<span class="pl-c1">PushBack</span>(<span class="pl-s1">e</span>.<span class="pl-c1">Right</span>)
            }
        }
    }
    <span class="pl-k">return</span> <span class="pl-s1">root</span>
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">JavaScript:</h3><a id="user-content-javascript" class="anchor" aria-label="Permalink: JavaScript:" href="#javascript"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">使用递归版本的前序遍历</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var invertTree = function(root) {
    // 终止条件
    if (!root) {
        return null;
    }
    // 交换左右节点
    const rightNode = root.right;
    root.right = invertTree(root.left);
    root.left = invertTree(rightNode);
    return root;
};"><pre><span class="pl-k">var</span> <span class="pl-en">invertTree</span> <span class="pl-c1">=</span> <span class="pl-k">function</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-c">// 终止条件</span>
    <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-c1">!</span><span class="pl-s1">root</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">return</span> <span class="pl-c1">null</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
    <span class="pl-c">// 交换左右节点</span>
    <span class="pl-k">const</span> <span class="pl-s1">rightNode</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">;</span>
    <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">rightNode</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span></pre></div>
<p dir="auto">使用迭代版本(统一模板))的前序遍历：</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var invertTree = function(root) {
    //我们先定义节点交换函数
    const invertNode = function(root, left, right) {
        let temp = left;
        left = right;
        right = temp;
        root.left = left;
        root.right = right;
    }
    //使用迭代方法的前序遍历 
    let stack = [];
    if(root === null) {
        return root;
    }
    stack.push(root);
    while(stack.length) {
        let node = stack.pop();
        if(node !== null) {
            //前序遍历顺序中左右  入栈顺序是前序遍历的倒序右左中
            node.right &amp;&amp; stack.push(node.right);
            node.left &amp;&amp; stack.push(node.left);
            stack.push(node);
            stack.push(null);
        } else {
            node = stack.pop();
            //节点处理逻辑
            invertNode(node, node.left, node.right);
        }
    }
    return root;
};"><pre><span class="pl-k">var</span> <span class="pl-en">invertTree</span> <span class="pl-c1">=</span> <span class="pl-k">function</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-c">//我们先定义节点交换函数</span>
    <span class="pl-k">const</span> <span class="pl-en">invertNode</span> <span class="pl-c1">=</span> <span class="pl-k">function</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">,</span> <span class="pl-s1">left</span><span class="pl-kos">,</span> <span class="pl-s1">right</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">let</span> <span class="pl-s1">temp</span> <span class="pl-c1">=</span> <span class="pl-s1">left</span><span class="pl-kos">;</span>
        <span class="pl-s1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">right</span><span class="pl-kos">;</span>
        <span class="pl-s1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">temp</span><span class="pl-kos">;</span>
        <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">left</span><span class="pl-kos">;</span>
        <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">right</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
    <span class="pl-c">//使用迭代方法的前序遍历 </span>
    <span class="pl-k">let</span> <span class="pl-s1">stack</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
    <span class="pl-k">if</span><span class="pl-kos">(</span><span class="pl-s1">root</span> <span class="pl-c1">===</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
    <span class="pl-s1">stack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">while</span><span class="pl-kos">(</span><span class="pl-s1">stack</span><span class="pl-kos">.</span><span class="pl-c1">length</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">let</span> <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">stack</span><span class="pl-kos">.</span><span class="pl-en">pop</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-k">if</span><span class="pl-kos">(</span><span class="pl-s1">node</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-c">//前序遍历顺序中左右  入栈顺序是前序遍历的倒序右左中</span>
            <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">stack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">stack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-s1">stack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">node</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-s1">stack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-c1">null</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span> <span class="pl-k">else</span> <span class="pl-kos">{</span>
            <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">stack</span><span class="pl-kos">.</span><span class="pl-en">pop</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-c">//节点处理逻辑</span>
            <span class="pl-en">invertNode</span><span class="pl-kos">(</span><span class="pl-s1">node</span><span class="pl-kos">,</span> <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">,</span> <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span></pre></div>
<p dir="auto">使用层序遍历：</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var invertTree = function(root) {
    //我们先定义节点交换函数
    const invertNode = function(root, left, right) {
        let temp = left;
        left = right;
        right = temp;
        root.left = left;
        root.right = right;
    }
    //使用层序遍历
    let queue = [];
    if(root === null) {
        return root;
    } 
    queue.push(root);
    while(queue.length) {
        let length = queue.length;
        while(length--) {
            let node = queue.shift();
            //节点处理逻辑
            invertNode(node, node.left, node.right);
            node.left &amp;&amp; queue.push(node.left);
            node.right &amp;&amp; queue.push(node.right);
        }
    }
    return root;
};"><pre><span class="pl-k">var</span> <span class="pl-en">invertTree</span> <span class="pl-c1">=</span> <span class="pl-k">function</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-c">//我们先定义节点交换函数</span>
    <span class="pl-k">const</span> <span class="pl-en">invertNode</span> <span class="pl-c1">=</span> <span class="pl-k">function</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">,</span> <span class="pl-s1">left</span><span class="pl-kos">,</span> <span class="pl-s1">right</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">let</span> <span class="pl-s1">temp</span> <span class="pl-c1">=</span> <span class="pl-s1">left</span><span class="pl-kos">;</span>
        <span class="pl-s1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">right</span><span class="pl-kos">;</span>
        <span class="pl-s1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">temp</span><span class="pl-kos">;</span>
        <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">left</span><span class="pl-kos">;</span>
        <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">right</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
    <span class="pl-c">//使用层序遍历</span>
    <span class="pl-k">let</span> <span class="pl-s1">queue</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
    <span class="pl-k">if</span><span class="pl-kos">(</span><span class="pl-s1">root</span> <span class="pl-c1">===</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span> 
    <span class="pl-s1">queue</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">while</span><span class="pl-kos">(</span><span class="pl-s1">queue</span><span class="pl-kos">.</span><span class="pl-c1">length</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">let</span> <span class="pl-s1">length</span> <span class="pl-c1">=</span> <span class="pl-s1">queue</span><span class="pl-kos">.</span><span class="pl-c1">length</span><span class="pl-kos">;</span>
        <span class="pl-k">while</span><span class="pl-kos">(</span><span class="pl-s1">length</span><span class="pl-c1">--</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-k">let</span> <span class="pl-s1">node</span> <span class="pl-c1">=</span> <span class="pl-s1">queue</span><span class="pl-kos">.</span><span class="pl-en">shift</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-c">//节点处理逻辑</span>
            <span class="pl-en">invertNode</span><span class="pl-kos">(</span><span class="pl-s1">node</span><span class="pl-kos">,</span> <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">,</span> <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">queue</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">&amp;&amp;</span> <span class="pl-s1">queue</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">TypeScript：</h3><a id="user-content-typescript" class="anchor" aria-label="Permalink: TypeScript：" href="#typescript"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">递归法：</p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// 递归法（前序遍历）
function invertTree(root: TreeNode | null): TreeNode | null {
    if (root === null) return root;
    let tempNode: TreeNode | null = root.left;
    root.left = root.right;
    root.right = tempNode;
    invertTree(root.left);
    invertTree(root.right);
    return root;
};

// 递归法（后序遍历）
function invertTree(root: TreeNode | null): TreeNode | null {
    if (root === null) return root;
    invertTree(root.left);
    invertTree(root.right);
    let tempNode: TreeNode | null = root.left;
    root.left = root.right;
    root.right = tempNode;
    return root;
};

// 递归法（中序遍历）
function invertTree(root: TreeNode | null): TreeNode | null {
    if (root === null) return root;
    invertTree(root.left);
    let tempNode: TreeNode | null = root.left;
    root.left = root.right;
    root.right = tempNode;
    // 因为左右节点已经进行交换，此时的root.left 是原先的root.right
    invertTree(root.left);
    return root;
};"><pre><span class="pl-c">// 递归法（前序遍历）</span>
<span class="pl-k">function</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">)</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span> <span class="pl-kos">{</span>
    <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">root</span> <span class="pl-c1">===</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
    <span class="pl-k">let</span> <span class="pl-s1">tempNode</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">;</span>
    <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">;</span>
    <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">tempNode</span><span class="pl-kos">;</span>
    <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span>

<span class="pl-c">// 递归法（后序遍历）</span>
<span class="pl-k">function</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">)</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span> <span class="pl-kos">{</span>
    <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">root</span> <span class="pl-c1">===</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
    <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">let</span> <span class="pl-s1">tempNode</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">;</span>
    <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">;</span>
    <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">tempNode</span><span class="pl-kos">;</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span>

<span class="pl-c">// 递归法（中序遍历）</span>
<span class="pl-k">function</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">)</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span> <span class="pl-kos">{</span>
    <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">root</span> <span class="pl-c1">===</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
    <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">let</span> <span class="pl-s1">tempNode</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">;</span>
    <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">;</span>
    <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">tempNode</span><span class="pl-kos">;</span>
    <span class="pl-c">// 因为左右节点已经进行交换，此时的root.left 是原先的root.right</span>
    <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span></pre></div>
<p dir="auto">迭代法：</p>
<div class="highlight highlight-source-ts notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// 迭代法（栈模拟前序遍历）
function invertTree(root: TreeNode | null): TreeNode | null {
    let helperStack: TreeNode[] = [];
    let curNode: TreeNode,
        tempNode: TreeNode | null;
    if (root !== null) helperStack.push(root);
    while (helperStack.length &gt; 0) {
        curNode = helperStack.pop()!;
        // 入栈操作最好在交换节点之前进行，便于理解
        if (curNode.right) helperStack.push(curNode.right);
        if (curNode.left) helperStack.push(curNode.left);
        tempNode = curNode.left;
        curNode.left = curNode.right;
        curNode.right = tempNode;
    }
    return root;
};

// 迭代法（栈模拟中序遍历-统一写法形式）
function invertTree(root: TreeNode | null): TreeNode | null {
    let helperStack: (TreeNode | null)[] = [];
    let curNode: TreeNode | null,
        tempNode: TreeNode | null;
    if (root !== null) helperStack.push(root);
    while (helperStack.length &gt; 0) {
        curNode = helperStack.pop();
        if (curNode !== null) {
            if (curNode.right !== null) helperStack.push(curNode.right);
            helperStack.push(curNode);
            helperStack.push(null);
            if (curNode.left !== null) helperStack.push(curNode.left);
        } else {
            curNode = helperStack.pop()!;
            tempNode = curNode.left;
            curNode.left = curNode.right;
            curNode.right = tempNode;
        }
    }
    return root;
};

// 迭代法（栈模拟后序遍历-统一写法形式）
function invertTree(root: TreeNode | null): TreeNode | null {
    let helperStack: (TreeNode | null)[] = [];
    let curNode: TreeNode | null,
        tempNode: TreeNode | null;
    if (root !== null) helperStack.push(root);
    while (helperStack.length &gt; 0) {
        curNode = helperStack.pop();
        if (curNode !== null) {
            helperStack.push(curNode);
            helperStack.push(null);
            if (curNode.right !== null) helperStack.push(curNode.right);
            if (curNode.left !== null) helperStack.push(curNode.left);
        } else {
            curNode = helperStack.pop()!;
            tempNode = curNode.left;
            curNode.left = curNode.right;
            curNode.right = tempNode;
        }
    }
    return root;
};

// 迭代法（队列模拟层序遍历）
function invertTree(root: TreeNode | null): TreeNode | null {
    const helperQueue: TreeNode[] = [];
    let curNode: TreeNode,
        tempNode: TreeNode | null;
    if (root !== null) helperQueue.push(root);
    while (helperQueue.length &gt; 0) {
        for (let i = 0, length = helperQueue.length; i &lt; length; i++) {
            curNode = helperQueue.shift()!;
            tempNode = curNode.left;
            curNode.left = curNode.right;
            curNode.right = tempNode;
            if (curNode.left !== null) helperQueue.push(curNode.left);
            if (curNode.right !== null) helperQueue.push(curNode.right);
        }
    }
    return root;
};"><pre><span class="pl-c">// 迭代法（栈模拟前序遍历）</span>
<span class="pl-k">function</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">)</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span> <span class="pl-kos">{</span>
    <span class="pl-k">let</span> <span class="pl-s1">helperStack</span>: <span class="pl-smi">TreeNode</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
    <span class="pl-k">let</span> <span class="pl-s1">curNode</span>: <span class="pl-smi">TreeNode</span><span class="pl-kos">,</span>
        <span class="pl-s1">tempNode</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">;</span>
    <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">root</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">&gt;</span> <span class="pl-c1">0</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-s1">curNode</span> <span class="pl-c1">=</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">pop</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-c1">!</span><span class="pl-kos">;</span>
        <span class="pl-c">// 入栈操作最好在交换节点之前进行，便于理解</span>
        <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">)</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-s1">tempNode</span> <span class="pl-c1">=</span> <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">;</span>
        <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">;</span>
        <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">tempNode</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span>

<span class="pl-c">// 迭代法（栈模拟中序遍历-统一写法形式）</span>
<span class="pl-k">function</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">)</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span> <span class="pl-kos">{</span>
    <span class="pl-k">let</span> <span class="pl-s1">helperStack</span>: <span class="pl-kos">(</span><span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">)</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
    <span class="pl-k">let</span> <span class="pl-s1">curNode</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">,</span>
        <span class="pl-s1">tempNode</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">;</span>
    <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">root</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">&gt;</span> <span class="pl-c1">0</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-s1">curNode</span> <span class="pl-c1">=</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">pop</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">curNode</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-c1">null</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span> <span class="pl-k">else</span> <span class="pl-kos">{</span>
            <span class="pl-s1">curNode</span> <span class="pl-c1">=</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">pop</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-c1">!</span><span class="pl-kos">;</span>
            <span class="pl-s1">tempNode</span> <span class="pl-c1">=</span> <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">;</span>
            <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">;</span>
            <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">tempNode</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span>

<span class="pl-c">// 迭代法（栈模拟后序遍历-统一写法形式）</span>
<span class="pl-k">function</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">)</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span> <span class="pl-kos">{</span>
    <span class="pl-k">let</span> <span class="pl-s1">helperStack</span>: <span class="pl-kos">(</span><span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">)</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
    <span class="pl-k">let</span> <span class="pl-s1">curNode</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">,</span>
        <span class="pl-s1">tempNode</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">;</span>
    <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">root</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">&gt;</span> <span class="pl-c1">0</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-s1">curNode</span> <span class="pl-c1">=</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">pop</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">curNode</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-c1">null</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span> <span class="pl-k">else</span> <span class="pl-kos">{</span>
            <span class="pl-s1">curNode</span> <span class="pl-c1">=</span> <span class="pl-s1">helperStack</span><span class="pl-kos">.</span><span class="pl-en">pop</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-c1">!</span><span class="pl-kos">;</span>
            <span class="pl-s1">tempNode</span> <span class="pl-c1">=</span> <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">;</span>
            <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">;</span>
            <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">tempNode</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span>

<span class="pl-c">// 迭代法（队列模拟层序遍历）</span>
<span class="pl-k">function</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">)</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span> <span class="pl-kos">{</span>
    <span class="pl-k">const</span> <span class="pl-s1">helperQueue</span>: <span class="pl-smi">TreeNode</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
    <span class="pl-k">let</span> <span class="pl-s1">curNode</span>: <span class="pl-smi">TreeNode</span><span class="pl-kos">,</span>
        <span class="pl-s1">tempNode</span>: <span class="pl-smi">TreeNode</span> <span class="pl-c1">|</span> <span class="pl-c1">null</span><span class="pl-kos">;</span>
    <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">root</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">while</span> <span class="pl-kos">(</span><span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-c1">length</span> <span class="pl-c1">&gt;</span> <span class="pl-c1">0</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-k">for</span> <span class="pl-kos">(</span><span class="pl-k">let</span> <span class="pl-s1">i</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span><span class="pl-kos">,</span> <span class="pl-s1">length</span> <span class="pl-c1">=</span> <span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-c1">length</span><span class="pl-kos">;</span> <span class="pl-s1">i</span> <span class="pl-c1">&lt;</span> <span class="pl-s1">length</span><span class="pl-kos">;</span> <span class="pl-s1">i</span><span class="pl-c1">++</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-s1">curNode</span> <span class="pl-c1">=</span> <span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">shift</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-c1">!</span><span class="pl-kos">;</span>
            <span class="pl-s1">tempNode</span> <span class="pl-c1">=</span> <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">;</span>
            <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">;</span>
            <span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">tempNode</span><span class="pl-kos">;</span>
            <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span> <span class="pl-c1">!==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-s1">helperQueue</span><span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span><span class="pl-s1">curNode</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">;</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">C:</h3><a id="user-content-c" class="anchor" aria-label="Permalink: C:" href="#c"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">递归法</p>
<div class="highlight highlight-source-c notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="struct TreeNode* invertTree(struct TreeNode* root){
    if(!root)
        return NULL;
    //交换结点的左右孩子（中）
    struct TreeNode* temp = root-&gt;right;
    root-&gt;right = root-&gt;left;
    root-&gt;left = temp;
    左
    invertTree(root-&gt;left);
    //右
    invertTree(root-&gt;right);
    return root;
}"><pre><span class="pl-k">struct</span> <span class="pl-smi">TreeNode</span><span class="pl-c1">*</span> <span class="pl-en">invertTree</span>(<span class="pl-k">struct</span> <span class="pl-smi">TreeNode</span><span class="pl-c1">*</span> <span class="pl-s1">root</span>){
    <span class="pl-k">if</span>(!<span class="pl-s1">root</span>)
        <span class="pl-k">return</span> <span class="pl-c1">NULL</span>;
    <span class="pl-c">//交换结点的左右孩子（中）</span>
    <span class="pl-k">struct</span> <span class="pl-smi">TreeNode</span><span class="pl-c1">*</span> <span class="pl-s1">temp</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span><span class="pl-c1">-&gt;</span><span class="pl-c1">right</span>;
    <span class="pl-s1">root</span><span class="pl-c1">-&gt;</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">root</span><span class="pl-c1">-&gt;</span><span class="pl-c1">left</span>;
    <span class="pl-s1">root</span><span class="pl-c1">-&gt;</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">temp</span>;
    <span class="pl-smi">左</span>
    <span class="pl-en">invertTree</span>(<span class="pl-smi">root</span><span class="pl-c1">-&gt;</span><span class="pl-s1">left</span>);
    <span class="pl-c">//右</span>
    <span class="pl-en">invertTree</span>(<span class="pl-s1">root</span><span class="pl-c1">-&gt;</span><span class="pl-c1">right</span>);
    <span class="pl-k">return</span> <span class="pl-s1">root</span>;
}</pre></div>
<p dir="auto">迭代法：深度优先遍历</p>
<div class="highlight highlight-source-c notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="struct TreeNode* invertTree(struct TreeNode* root){
    if(!root)
        return NULL;
    //存储结点的栈
    struct TreeNode** stack = (struct TreeNode**)malloc(sizeof(struct TreeNode*) * 100);
    int stackTop = 0;
    //将根节点入栈
    stack[stackTop++] = root;
    //若栈中还有元素（进行循环）
    while(stackTop) {
        //取出栈顶元素
        struct TreeNode* temp = stack[--stackTop];
        //交换结点的左右孩子
        struct TreeNode* tempNode = temp-&gt;right;
        temp-&gt;right = temp-&gt;left;
        temp-&gt;left = tempNode;
        //若当前结点有左右孩子，将其入栈
        if(temp-&gt;right)
            stack[stackTop++] = temp-&gt;right;
        if(temp-&gt;left)
            stack[stackTop++] = temp-&gt;left;
    }
    return root;
}"><pre><span class="pl-k">struct</span> <span class="pl-smi">TreeNode</span><span class="pl-c1">*</span> <span class="pl-en">invertTree</span>(<span class="pl-k">struct</span> <span class="pl-smi">TreeNode</span><span class="pl-c1">*</span> <span class="pl-s1">root</span>){
    <span class="pl-k">if</span>(!<span class="pl-s1">root</span>)
        <span class="pl-k">return</span> <span class="pl-c1">NULL</span>;
    <span class="pl-c">//存储结点的栈</span>
    <span class="pl-k">struct</span> <span class="pl-smi">TreeNode</span><span class="pl-c1">*</span><span class="pl-c1">*</span> <span class="pl-s1">stack</span> <span class="pl-c1">=</span> (<span class="pl-k">struct</span> <span class="pl-smi">TreeNode</span><span class="pl-c1">*</span><span class="pl-c1">*</span>)<span class="pl-en">malloc</span>(<span class="pl-k">sizeof</span>(<span class="pl-k">struct</span> <span class="pl-smi">TreeNode</span><span class="pl-c1">*</span>) <span class="pl-c1">*</span> <span class="pl-c1">100</span>);
    <span class="pl-smi">int</span> <span class="pl-s1">stackTop</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span>;
    <span class="pl-c">//将根节点入栈</span>
    <span class="pl-s1">stack</span>[<span class="pl-s1">stackTop</span><span class="pl-c1">++</span>] <span class="pl-c1">=</span> <span class="pl-s1">root</span>;
    <span class="pl-c">//若栈中还有元素（进行循环）</span>
    <span class="pl-k">while</span>(<span class="pl-s1">stackTop</span>) {
        <span class="pl-c">//取出栈顶元素</span>
        <span class="pl-k">struct</span> <span class="pl-smi">TreeNode</span><span class="pl-c1">*</span> <span class="pl-s1">temp</span> <span class="pl-c1">=</span> <span class="pl-s1">stack</span>[<span class="pl-c1">--</span><span class="pl-s1">stackTop</span>];
        <span class="pl-c">//交换结点的左右孩子</span>
        <span class="pl-k">struct</span> <span class="pl-smi">TreeNode</span><span class="pl-c1">*</span> <span class="pl-s1">tempNode</span> <span class="pl-c1">=</span> <span class="pl-s1">temp</span><span class="pl-c1">-&gt;</span><span class="pl-c1">right</span>;
        <span class="pl-s1">temp</span><span class="pl-c1">-&gt;</span><span class="pl-c1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">temp</span><span class="pl-c1">-&gt;</span><span class="pl-c1">left</span>;
        <span class="pl-s1">temp</span><span class="pl-c1">-&gt;</span><span class="pl-c1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">tempNode</span>;
        <span class="pl-c">//若当前结点有左右孩子，将其入栈</span>
        <span class="pl-k">if</span>(<span class="pl-s1">temp</span><span class="pl-c1">-&gt;</span><span class="pl-c1">right</span>)
            <span class="pl-s1">stack</span>[<span class="pl-s1">stackTop</span><span class="pl-c1">++</span>] <span class="pl-c1">=</span> <span class="pl-s1">temp</span><span class="pl-c1">-&gt;</span><span class="pl-c1">right</span>;
        <span class="pl-k">if</span>(<span class="pl-s1">temp</span><span class="pl-c1">-&gt;</span><span class="pl-c1">left</span>)
            <span class="pl-s1">stack</span>[<span class="pl-s1">stackTop</span><span class="pl-c1">++</span>] <span class="pl-c1">=</span> <span class="pl-s1">temp</span><span class="pl-c1">-&gt;</span><span class="pl-c1">left</span>;
    }
    <span class="pl-k">return</span> <span class="pl-s1">root</span>;
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Swift：</h3><a id="user-content-swift" class="anchor" aria-label="Permalink: Swift：" href="#swift"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-swift notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// 前序遍历-递归
func invertTree(_ root: TreeNode?) -&gt; TreeNode? {
    guard let root = root else {
        return root
    }
    let tmp = root.left
    root.left = root.right
    root.right = tmp
    let _ = invertTree(root.left)
    let _ = invertTree(root.right)
    return root
}

// 层序遍历-迭代
func invertTree1(_ root: TreeNode?) -&gt; TreeNode? {
    guard let root = root else {
        return nil
    }
    var queue = [TreeNode]()
    queue.append(root)
    while !queue.isEmpty {
        let node = queue.removeFirst()
        let tmp = node.left
        node.left = node.right
        node.right = tmp
        if let left = node.left {
            queue.append(left)
        }
        if let right = node.right {
            queue.append(right)
        }
    }
    return root
}"><pre>// 前序遍历-递归
<span class="pl-en">func</span> invertTree<span class="pl-kos">(</span>_ root<span class="pl-kos">:</span> <span class="pl-smi">TreeNode</span><span class="pl-c1"><span class="pl-c1">?</span></span><span class="pl-kos">)</span> <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span><span class="pl-c1"><span class="pl-c1">?</span></span> <span class="pl-kos">{</span>
    <span class="pl-k">guard</span> <span class="pl-k">let</span> root <span class="pl-c1">=</span> root <span class="pl-k">else</span> <span class="pl-kos">{</span>
        <span class="pl-k">return</span> root
    <span class="pl-kos">}</span>
    <span class="pl-k">let</span> <span class="pl-s1">tmp</span> <span class="pl-c1">=</span> root<span class="pl-kos">.</span>left
    root<span class="pl-kos">.</span>left <span class="pl-c1">=</span> root<span class="pl-kos">.</span>right
    root<span class="pl-kos">.</span>right <span class="pl-c1">=</span> tmp
    <span class="pl-k">let</span> _ <span class="pl-c1">=</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span>root<span class="pl-kos">.</span>left<span class="pl-kos">)</span>
    <span class="pl-k">let</span> _ <span class="pl-c1">=</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span>root<span class="pl-kos">.</span>right<span class="pl-kos">)</span>
    <span class="pl-k">return</span> root
<span class="pl-kos">}</span>

// 层序遍历-迭代
<span class="pl-en">func</span> invertTree1<span class="pl-kos">(</span>_ root<span class="pl-kos">:</span> <span class="pl-smi">TreeNode</span><span class="pl-c1"><span class="pl-c1">?</span></span><span class="pl-kos">)</span> <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span><span class="pl-c1"><span class="pl-c1">?</span></span> <span class="pl-kos">{</span>
    <span class="pl-k">guard</span> <span class="pl-k">let</span> root <span class="pl-c1">=</span> root <span class="pl-k">else</span> <span class="pl-kos">{</span>
        <span class="pl-k">return</span> <span class="pl-smi">nil</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">var</span> <span class="pl-s1">queue</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span>TreeNode<span class="pl-kos">]</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
    queue<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span>root<span class="pl-kos">)</span>
    <span class="pl-k">while</span> !queue<span class="pl-kos">.</span>isEmpty <span class="pl-kos">{</span>
        <span class="pl-k">let</span> <span class="pl-s1">node</span> <span class="pl-c1">=</span> queue<span class="pl-kos">.</span><span class="pl-en">removeFirst</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
        <span class="pl-k">let</span> <span class="pl-s1">tmp</span> <span class="pl-c1">=</span> node<span class="pl-kos">.</span>left
        node<span class="pl-kos">.</span>left <span class="pl-c1">=</span> node<span class="pl-kos">.</span>right
        node<span class="pl-kos">.</span>right <span class="pl-c1">=</span> tmp
        <span class="pl-k">if</span> <span class="pl-k">let</span> left <span class="pl-c1">=</span> node<span class="pl-kos">.</span>left <span class="pl-kos">{</span>
            queue<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span>left<span class="pl-kos">)</span>
        <span class="pl-kos">}</span>
        <span class="pl-k">if</span> <span class="pl-k">let</span> right <span class="pl-c1">=</span> node<span class="pl-kos">.</span>right <span class="pl-kos">{</span>
            queue<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span>right<span class="pl-kos">)</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">return</span> root
<span class="pl-kos">}</span></pre></div>
<p dir="auto">深度优先递归。</p>
<div class="highlight highlight-source-swift notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="func invertTree(_ root: TreeNode?) -&gt; TreeNode? {
    guard let node = root else { return root }
    swap(&amp;node.left, &amp;node.right)
    _ = invertTree(node.left)
    _ = invertTree(node.right)
    return root
}"><pre><span class="pl-en">func</span> invertTree<span class="pl-kos">(</span>_ root<span class="pl-kos">:</span> <span class="pl-smi">TreeNode</span><span class="pl-c1"><span class="pl-c1">?</span></span><span class="pl-kos">)</span> <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span><span class="pl-c1"><span class="pl-c1">?</span></span> <span class="pl-kos">{</span>
    <span class="pl-k">guard</span> <span class="pl-k">let</span> node <span class="pl-c1">=</span> root <span class="pl-k">else</span> <span class="pl-kos">{</span> <span class="pl-k">return</span> root <span class="pl-kos">}</span>
    <span class="pl-en">swap</span><span class="pl-kos">(</span><span class="pl-c1">&amp;</span>node<span class="pl-kos">.</span>left<span class="pl-kos">,</span> <span class="pl-c1">&amp;</span>node<span class="pl-kos">.</span>right<span class="pl-kos">)</span>
    _ <span class="pl-c1">=</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span>node<span class="pl-kos">.</span>left<span class="pl-kos">)</span>
    _ <span class="pl-c1">=</span> <span class="pl-en">invertTree</span><span class="pl-kos">(</span>node<span class="pl-kos">.</span>right<span class="pl-kos">)</span>
    <span class="pl-k">return</span> root
<span class="pl-kos">}</span></pre></div>
<p dir="auto">深度优先迭代，子结点顺序不重要，从根结点出发深度遍历即可。</p>
<div class="highlight highlight-source-swift notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="func invertTree(_ root: TreeNode?) -&gt; TreeNode? {
    guard let node = root else { return root }
    var stack = [node]
    while !stack.isEmpty {
        guard let node = stack.popLast() else { break }
        swap(&amp;node.left, &amp;node.right)
        if let node = node.left { stack.append(node) }
        if let node = node.right { stack.append(node) }
    }
    return root
}"><pre><span class="pl-en">func</span> invertTree<span class="pl-kos">(</span>_ root<span class="pl-kos">:</span> <span class="pl-smi">TreeNode</span><span class="pl-c1"><span class="pl-c1">?</span></span><span class="pl-kos">)</span> <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span><span class="pl-c1"><span class="pl-c1">?</span></span> <span class="pl-kos">{</span>
    <span class="pl-k">guard</span> <span class="pl-k">let</span> node <span class="pl-c1">=</span> root <span class="pl-k">else</span> <span class="pl-kos">{</span> <span class="pl-k">return</span> root <span class="pl-kos">}</span>
    <span class="pl-k">var</span> <span class="pl-s1">stack</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span>node<span class="pl-kos">]</span>
    <span class="pl-k">while</span> !stack<span class="pl-kos">.</span>isEmpty <span class="pl-kos">{</span>
        <span class="pl-k">guard</span> <span class="pl-k">let</span> node <span class="pl-c1">=</span> stack<span class="pl-kos">.</span><span class="pl-en">popLast</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-k">else</span> <span class="pl-kos">{</span> <span class="pl-k">break</span> <span class="pl-kos">}</span>
        <span class="pl-en">swap</span><span class="pl-kos">(</span><span class="pl-c1">&amp;</span>node<span class="pl-kos">.</span>left<span class="pl-kos">,</span> <span class="pl-c1">&amp;</span>node<span class="pl-kos">.</span>right<span class="pl-kos">)</span>
        <span class="pl-k">if</span> <span class="pl-k">let</span> node <span class="pl-c1">=</span> node<span class="pl-kos">.</span>left <span class="pl-kos">{</span> stack<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span>node<span class="pl-kos">)</span> <span class="pl-kos">}</span>
        <span class="pl-k">if</span> <span class="pl-k">let</span> node <span class="pl-c1">=</span> node<span class="pl-kos">.</span>right <span class="pl-kos">{</span> stack<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span>node<span class="pl-kos">)</span> <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">return</span> root
<span class="pl-kos">}</span></pre></div>
<p dir="auto">广度优先迭代。</p>
<div class="highlight highlight-source-swift notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="func invertTree(_ root: TreeNode?) -&gt; TreeNode? {
    guard let node = root else { return root }
    var queue = [node]
    while !queue.isEmpty {
        let count = queue.count
        for _ in 0 ..&lt; count {
            let node = queue.removeFirst()
            swap(&amp;node.left, &amp;node.right)
            if let node = node.left { queue.append(node) }
            if let node = node.right { queue.append(node) }
        }
    }
    return root
}"><pre><span class="pl-en">func</span> invertTree<span class="pl-kos">(</span>_ root<span class="pl-kos">:</span> <span class="pl-smi">TreeNode</span><span class="pl-c1"><span class="pl-c1">?</span></span><span class="pl-kos">)</span> <span class="pl-c1">-&gt;</span> <span class="pl-smi">TreeNode</span><span class="pl-c1"><span class="pl-c1">?</span></span> <span class="pl-kos">{</span>
    <span class="pl-k">guard</span> <span class="pl-k">let</span> node <span class="pl-c1">=</span> root <span class="pl-k">else</span> <span class="pl-kos">{</span> <span class="pl-k">return</span> root <span class="pl-kos">}</span>
    <span class="pl-k">var</span> <span class="pl-s1">queue</span> <span class="pl-c1">=</span> <span class="pl-kos">[</span>node<span class="pl-kos">]</span>
    <span class="pl-k">while</span> !queue<span class="pl-kos">.</span>isEmpty <span class="pl-kos">{</span>
        <span class="pl-k">let</span> <span class="pl-s1">count</span> <span class="pl-c1">=</span> queue<span class="pl-kos">.</span>count
        <span class="pl-k">for</span> <span class="pl-s1">_</span> <span class="pl-k">in</span> <span class="pl-c1">0</span> <span class="pl-c1">..&lt;</span> count <span class="pl-kos">{</span>
            <span class="pl-k">let</span> <span class="pl-s1">node</span> <span class="pl-c1">=</span> queue<span class="pl-kos">.</span><span class="pl-en">removeFirst</span><span class="pl-kos">(</span><span class="pl-kos">)</span>
            <span class="pl-en">swap</span><span class="pl-kos">(</span><span class="pl-c1">&amp;</span>node<span class="pl-kos">.</span>left<span class="pl-kos">,</span> <span class="pl-c1">&amp;</span>node<span class="pl-kos">.</span>right<span class="pl-kos">)</span>
            <span class="pl-k">if</span> <span class="pl-k">let</span> node <span class="pl-c1">=</span> node<span class="pl-kos">.</span>left <span class="pl-kos">{</span> queue<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span>node<span class="pl-kos">)</span> <span class="pl-kos">}</span>
            <span class="pl-k">if</span> <span class="pl-k">let</span> node <span class="pl-c1">=</span> node<span class="pl-kos">.</span>right <span class="pl-kos">{</span> queue<span class="pl-kos">.</span><span class="pl-en">append</span><span class="pl-kos">(</span>node<span class="pl-kos">)</span> <span class="pl-kos">}</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">}</span>
    <span class="pl-k">return</span> root
<span class="pl-kos">}</span></pre></div>
<p dir="auto">深度优先遍历（前序遍历）:</p>
<div class="highlight highlight-source-scala notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="object Solution {
  def invertTree(root: TreeNode): TreeNode = {
    if (root == null) return root
    // 递归
    def process(node: TreeNode): Unit = {
      if (node == null) return
      // 翻转节点
      val curNode = node.left
      node.left = node.right
      node.right = curNode
      process(node.left)
      process(node.right)
    }
    process(root)
    root
  }
}"><pre><span class="pl-k">object</span> <span class="pl-en">Solution</span> {
  <span class="pl-k">def</span> <span class="pl-en">invertTree</span>(<span class="pl-v">root</span>: <span class="pl-en">TreeNode</span>)<span class="pl-k">:</span> <span class="pl-en">TreeNode</span> <span class="pl-k">=</span> {
    <span class="pl-k">if</span> (root <span class="pl-k">==</span> <span class="pl-c1">null</span>) <span class="pl-k">return</span> root
    <span class="pl-c"><span class="pl-c">//</span> 递归</span>
    <span class="pl-k">def</span> <span class="pl-en">process</span>(<span class="pl-v">node</span>: <span class="pl-en">TreeNode</span>)<span class="pl-k">:</span> <span class="pl-en">Unit</span> <span class="pl-k">=</span> {
      <span class="pl-k">if</span> (node <span class="pl-k">==</span> <span class="pl-c1">null</span>) <span class="pl-k">return</span>
      <span class="pl-c"><span class="pl-c">//</span> 翻转节点</span>
      <span class="pl-k">val</span> <span class="pl-v">curNode</span> <span class="pl-k">=</span> node.left
      node.left <span class="pl-k">=</span> node.right
      node.right <span class="pl-k">=</span> curNode
      process(node.left)
      process(node.right)
    }
    process(root)
    root
  }
}</pre></div>
<p dir="auto">广度优先遍历（层序遍历）:</p>
<div class="highlight highlight-source-scala notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="object Solution {
  import scala.collection.mutable
  def invertTree(root: TreeNode): TreeNode = {
    if (root == null) return root
    val queue = mutable.Queue[TreeNode]()
    queue.enqueue(root)
    while (!queue.isEmpty) {
      val len = queue.size
      for (i &lt;- 0 until len) {
        var curNode = queue.dequeue()
        if (curNode.left != null) queue.enqueue(curNode.left)
        if (curNode.right != null) queue.enqueue(curNode.right)
        // 翻转
        var tmpNode = curNode.left
        curNode.left = curNode.right
        curNode.right = tmpNode
      }
    }
    root
  }
}"><pre><span class="pl-k">object</span> <span class="pl-en">Solution</span> {
  <span class="pl-k">import</span> <span class="pl-en">scala</span>.<span class="pl-en">collection</span>.<span class="pl-en">mutable</span>
  <span class="pl-k">def</span> <span class="pl-en">invertTree</span>(<span class="pl-v">root</span>: <span class="pl-en">TreeNode</span>)<span class="pl-k">:</span> <span class="pl-en">TreeNode</span> <span class="pl-k">=</span> {
    <span class="pl-k">if</span> (root <span class="pl-k">==</span> <span class="pl-c1">null</span>) <span class="pl-k">return</span> root
    <span class="pl-k">val</span> <span class="pl-v">queue</span> <span class="pl-k">=</span> mutable.<span class="pl-en">Queue</span>[<span class="pl-en">TreeNode</span>]()
    queue.enqueue(root)
    <span class="pl-k">while</span> (<span class="pl-k">!</span>queue.isEmpty) {
      <span class="pl-k">val</span> <span class="pl-v">len</span> <span class="pl-k">=</span> queue.size
      <span class="pl-k">for</span> (i <span class="pl-k">&lt;-</span> <span class="pl-c1">0</span> until len) {
        <span class="pl-k">var</span> <span class="pl-v">curNode</span> <span class="pl-k">=</span> queue.dequeue()
        <span class="pl-k">if</span> (curNode.left <span class="pl-k">!=</span> <span class="pl-c1">null</span>) queue.enqueue(curNode.left)
        <span class="pl-k">if</span> (curNode.right <span class="pl-k">!=</span> <span class="pl-c1">null</span>) queue.enqueue(curNode.right)
        <span class="pl-c"><span class="pl-c">//</span> 翻转</span>
        <span class="pl-k">var</span> <span class="pl-v">tmpNode</span> <span class="pl-k">=</span> curNode.left
        curNode.left <span class="pl-k">=</span> curNode.right
        curNode.right <span class="pl-k">=</span> tmpNode
      }
    }
    root
  }
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Rust:</h3><a id="user-content-rust" class="anchor" aria-label="Permalink: Rust:" href="#rust"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-rust notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="impl Solution {
    //* 递归 */
    pub fn invert_tree(root: Option&lt;Rc&lt;RefCell&lt;TreeNode&gt;&gt;&gt;) -&gt; Option&lt;Rc&lt;RefCell&lt;TreeNode&gt;&gt;&gt; {
        if let Some(node) = root.as_ref() {
            let (left, right) = (node.borrow().left.clone(), node.borrow().right.clone());
            node.borrow_mut().left = Self::invert_tree(right);
            node.borrow_mut().right = Self::invert_tree(left);
        }
        root
    }
    //* 迭代 */
    pub fn invert_tree(root: Option&lt;Rc&lt;RefCell&lt;TreeNode&gt;&gt;&gt;) -&gt; Option&lt;Rc&lt;RefCell&lt;TreeNode&gt;&gt;&gt; {
        let mut stack = vec![root.clone()];
        while !stack.is_empty() {
            if let Some(node) = stack.pop().unwrap() {
                let (left, right) = (node.borrow().left.clone(), node.borrow().right.clone());
                stack.push(right.clone());
                stack.push(left.clone());
                node.borrow_mut().left = right;
                node.borrow_mut().right = left;
            }
        }
        root
    }
}"><pre><span class="pl-k">impl</span> <span class="pl-smi">Solution</span> <span class="pl-kos">{</span>
    <span class="pl-c">//* 递归 */</span>
    <span class="pl-k">pub</span> <span class="pl-k">fn</span> <span class="pl-en">invert_tree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">:</span> <span class="pl-smi">Option</span><span class="pl-kos">&lt;</span><span class="pl-smi">Rc</span><span class="pl-kos">&lt;</span><span class="pl-smi">RefCell</span><span class="pl-kos">&lt;</span><span class="pl-smi">TreeNode</span><span class="pl-kos">&gt;</span><span class="pl-kos">&gt;</span><span class="pl-kos">&gt;</span><span class="pl-kos">)</span> -&gt; <span class="pl-smi">Option</span><span class="pl-kos">&lt;</span><span class="pl-smi">Rc</span><span class="pl-kos">&lt;</span><span class="pl-smi">RefCell</span><span class="pl-kos">&lt;</span><span class="pl-smi">TreeNode</span><span class="pl-kos">&gt;</span><span class="pl-kos">&gt;</span><span class="pl-kos">&gt;</span> <span class="pl-kos">{</span>
        <span class="pl-k">if</span> <span class="pl-k">let</span> <span class="pl-v">Some</span><span class="pl-kos">(</span>node<span class="pl-kos">)</span> = root<span class="pl-kos">.</span><span class="pl-en">as_ref</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-k">let</span> <span class="pl-kos">(</span>left<span class="pl-kos">,</span> right<span class="pl-kos">)</span> = <span class="pl-kos">(</span>node<span class="pl-kos">.</span><span class="pl-en">borrow</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">.</span><span class="pl-en">clone</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> node<span class="pl-kos">.</span><span class="pl-en">borrow</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">.</span><span class="pl-en">clone</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
            node<span class="pl-kos">.</span><span class="pl-en">borrow_mut</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">left</span> = <span class="pl-smi">Self</span><span class="pl-kos">::</span><span class="pl-en">invert_tree</span><span class="pl-kos">(</span>right<span class="pl-kos">)</span><span class="pl-kos">;</span>
            node<span class="pl-kos">.</span><span class="pl-en">borrow_mut</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">right</span> = <span class="pl-smi">Self</span><span class="pl-kos">::</span><span class="pl-en">invert_tree</span><span class="pl-kos">(</span>left<span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-kos">}</span>
        root
    <span class="pl-kos">}</span>
    <span class="pl-c">//* 迭代 */</span>
    <span class="pl-k">pub</span> <span class="pl-k">fn</span> <span class="pl-en">invert_tree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">:</span> <span class="pl-smi">Option</span><span class="pl-kos">&lt;</span><span class="pl-smi">Rc</span><span class="pl-kos">&lt;</span><span class="pl-smi">RefCell</span><span class="pl-kos">&lt;</span><span class="pl-smi">TreeNode</span><span class="pl-kos">&gt;</span><span class="pl-kos">&gt;</span><span class="pl-kos">&gt;</span><span class="pl-kos">)</span> -&gt; <span class="pl-smi">Option</span><span class="pl-kos">&lt;</span><span class="pl-smi">Rc</span><span class="pl-kos">&lt;</span><span class="pl-smi">RefCell</span><span class="pl-kos">&lt;</span><span class="pl-smi">TreeNode</span><span class="pl-kos">&gt;</span><span class="pl-kos">&gt;</span><span class="pl-kos">&gt;</span> <span class="pl-kos">{</span>
        <span class="pl-k">let</span> <span class="pl-k">mut</span> stack = <span class="pl-en">vec</span><span class="pl-en">!</span><span class="pl-kos">[</span>root<span class="pl-kos">.</span>clone<span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">]</span><span class="pl-kos">;</span>
        <span class="pl-k">while</span> !stack<span class="pl-kos">.</span><span class="pl-en">is_empty</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
            <span class="pl-k">if</span> <span class="pl-k">let</span> <span class="pl-v">Some</span><span class="pl-kos">(</span>node<span class="pl-kos">)</span> = stack<span class="pl-kos">.</span><span class="pl-en">pop</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">unwrap</span><span class="pl-kos">(</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
                <span class="pl-k">let</span> <span class="pl-kos">(</span>left<span class="pl-kos">,</span> right<span class="pl-kos">)</span> = <span class="pl-kos">(</span>node<span class="pl-kos">.</span><span class="pl-en">borrow</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">left</span><span class="pl-kos">.</span><span class="pl-en">clone</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">,</span> node<span class="pl-kos">.</span><span class="pl-en">borrow</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">right</span><span class="pl-kos">.</span><span class="pl-en">clone</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
                stack<span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span>right<span class="pl-kos">.</span><span class="pl-en">clone</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
                stack<span class="pl-kos">.</span><span class="pl-en">push</span><span class="pl-kos">(</span>left<span class="pl-kos">.</span><span class="pl-en">clone</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
                node<span class="pl-kos">.</span><span class="pl-en">borrow_mut</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">left</span> = right<span class="pl-kos">;</span>
                node<span class="pl-kos">.</span><span class="pl-en">borrow_mut</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-c1">right</span> = left<span class="pl-kos">;</span>
            <span class="pl-kos">}</span>
        <span class="pl-kos">}</span>
        root
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">C#:</h3><a id="user-content-c-1" class="anchor" aria-label="Permalink: C#:" href="#c-1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="//递归
public class Solution {
    public TreeNode InvertTree(TreeNode root) {
    if (root == null) return root;
    
    swap(root);
    InvertTree(root.left);
    InvertTree(root.right);
    return root;
    }
   
    public void swap(TreeNode node) {
        TreeNode temp = node.left;
        node.left = node.right;
        node.right = temp;
    }
}"><pre><span class="pl-c">//递归</span>
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-smi">Solution</span> <span class="pl-kos">{</span>
    <span class="pl-k">public</span> <span class="pl-s1">TreeNode</span> <span class="pl-en">InvertTree</span><span class="pl-kos">(</span><span class="pl-smi">TreeNode</span> <span class="pl-s1">root</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">root</span> <span class="pl-c1">==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
    
    <span class="pl-s1">swap</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-s1">InvertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-s1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-s1">InvertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-s1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
   
    <span class="pl-k">public</span> <span class="pl-smi">void</span> <span class="pl-en">swap</span><span class="pl-kos">(</span><span class="pl-smi">TreeNode</span> <span class="pl-s1">node</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
        <span class="pl-smi">TreeNode</span> <span class="pl-s1">temp</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-s1">left</span><span class="pl-kos">;</span>
        <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-s1">left</span> <span class="pl-c1">=</span> <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-s1">right</span><span class="pl-kos">;</span>
        <span class="pl-s1">node</span><span class="pl-kos">.</span><span class="pl-s1">right</span> <span class="pl-c1">=</span> <span class="pl-s1">temp</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="//迭代
public class Solution {
public TreeNode InvertTree(TreeNode root) {
    if(root == null) return root;
    (root.left,root.right) = (root.right, root.left);
    InvertTree(root.left);
    InvertTree(root.right);
    return root;
}
}"><pre><span class="pl-c">//迭代</span>
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-smi">Solution</span> <span class="pl-kos">{</span>
<span class="pl-k">public</span> <span class="pl-s1">TreeNode</span> <span class="pl-en">InvertTree</span><span class="pl-kos">(</span><span class="pl-smi">TreeNode</span> <span class="pl-s1">root</span><span class="pl-kos">)</span> <span class="pl-kos">{</span>
    <span class="pl-k">if</span><span class="pl-kos">(</span><span class="pl-s1">root</span> <span class="pl-c1">==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span> <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
    <span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-s1">left</span><span class="pl-kos">,</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-s1">right</span><span class="pl-kos">)</span> <span class="pl-c1">=</span> <span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-s1">right</span><span class="pl-kos">,</span> <span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-s1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-s1">InvertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-s1">left</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-s1">InvertTree</span><span class="pl-kos">(</span><span class="pl-s1">root</span><span class="pl-kos">.</span><span class="pl-s1">right</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
    <span class="pl-k">return</span> <span class="pl-s1">root</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<p align="center" dir="auto">
<a href="https://programmercarl.com/other/kstar.html" rel="nofollow">
  <img src="/feinan/leetcode-master/raw/master/pics/网站星球宣传海报.jpg" width="1000" style="max-width: 100%;">
</a>
</p></article></div><div class="d-none"></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

